#define YYBISON 1
#define YYBISON_VERSION "3.5"
#define YYSKELETON_NAME "yacc.c"
#define YYPURE 1
#define YYPUSH 0
#define YYPULL 1
#define yyparse _mesa_glsl_parse
#define yylex _mesa_glsl_lex
#define yyerror _mesa_glsl_error
#define yydebug _mesa_glsl_debug
#define yynerrs _mesa_glsl_nerrs
#line 1 "src/compiler/glsl/glsl_parser.yy"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifndef _MSC_VER
#include <strings.h>
#endif
#include <assert.h>
#include "ast.h"
#include "glsl_parser_extras.h"
#include "compiler/glsl_types.h"
#include "main/context.h"
#include "util/u_string.h"
#include "util/format/u_format.h"
#ifdef _MSC_VER
#pragma warning( disable : 4065 )
#endif
#undef yyerror
static void yyerror(YYLTYPE *loc, _mesa_glsl_parse_state *st, const char *msg)
{
_mesa_glsl_error(loc, st, "%s", msg);
}
static int
_mesa_glsl_lex(YYSTYPE *val, YYLTYPE *loc, _mesa_glsl_parse_state *state)
{
return _mesa_glsl_lexer_lex(val, loc, state->scanner);
}
static bool match_layout_qualifier(const char *s1, const char *s2,
_mesa_glsl_parse_state *state)
{
if (state->es_shader)
return strcmp(s1, s2);
else
return strcasecmp(s1, s2);
}
#line 157 "src/compiler/glsl/glsl_parser.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
# define YY_CAST(Type, Val) static_cast<Type> (Val)
# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
# else
# define YY_CAST(Type, Val) ((Type) (Val))
# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
# endif
# endif
# ifndef YY_NULLPTR
# if defined __cplusplus
# if 201103L <= __cplusplus
# define YY_NULLPTR nullptr
# else
# define YY_NULLPTR 0
# endif
# else
# define YY_NULLPTR ((void*)0)
# endif
# endif
#ifdef YYERROR_VERBOSE
# undef YYERROR_VERBOSE
# define YYERROR_VERBOSE 1
#else
# define YYERROR_VERBOSE 1
#endif
#ifndef YY__MESA_GLSL_SRC_COMPILER_GLSL_GLSL_PARSER_H_INCLUDED
# define YY__MESA_GLSL_SRC_COMPILER_GLSL_GLSL_PARSER_H_INCLUDED
#ifndef YYDEBUG
# define YYDEBUG 0
#endif
#if YYDEBUG
extern int _mesa_glsl_debug;
#endif
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
enum yytokentype
{
ATTRIBUTE = 258,
CONST_TOK = 259,
BASIC_TYPE_TOK = 260,
BREAK = 261,
BUFFER = 262,
CONTINUE = 263,
DO = 264,
ELSE = 265,
FOR = 266,
IF = 267,
DEMOTE = 268,
DISCARD = 269,
RETURN = 270,
SWITCH = 271,
CASE = 272,
DEFAULT = 273,
CENTROID = 274,
IN_TOK = 275,
OUT_TOK = 276,
INOUT_TOK = 277,
UNIFORM = 278,
VARYING = 279,
SAMPLE = 280,
NOPERSPECTIVE = 281,
FLAT = 282,
SMOOTH = 283,
IMAGE1DSHADOW = 284,
IMAGE2DSHADOW = 285,
IMAGE1DARRAYSHADOW = 286,
IMAGE2DARRAYSHADOW = 287,
COHERENT = 288,
VOLATILE = 289,
RESTRICT = 290,
READONLY = 291,
WRITEONLY = 292,
SHARED = 293,
STRUCT = 294,
VOID_TOK = 295,
WHILE = 296,
IDENTIFIER = 297,
TYPE_IDENTIFIER = 298,
NEW_IDENTIFIER = 299,
FLOATCONSTANT = 300,
DOUBLECONSTANT = 301,
INTCONSTANT = 302,
UINTCONSTANT = 303,
BOOLCONSTANT = 304,
INT64CONSTANT = 305,
UINT64CONSTANT = 306,
FIELD_SELECTION = 307,
LEFT_OP = 308,
RIGHT_OP = 309,
INC_OP = 310,
DEC_OP = 311,
LE_OP = 312,
GE_OP = 313,
EQ_OP = 314,
NE_OP = 315,
AND_OP = 316,
OR_OP = 317,
XOR_OP = 318,
MUL_ASSIGN = 319,
DIV_ASSIGN = 320,
ADD_ASSIGN = 321,
MOD_ASSIGN = 322,
LEFT_ASSIGN = 323,
RIGHT_ASSIGN = 324,
AND_ASSIGN = 325,
XOR_ASSIGN = 326,
OR_ASSIGN = 327,
SUB_ASSIGN = 328,
INVARIANT = 329,
PRECISE = 330,
LOWP = 331,
MEDIUMP = 332,
HIGHP = 333,
SUPERP = 334,
PRECISION = 335,
VERSION_TOK = 336,
EXTENSION = 337,
LINE = 338,
COLON = 339,
EOL = 340,
INTERFACE = 341,
OUTPUT = 342,
PRAGMA_DEBUG_ON = 343,
PRAGMA_DEBUG_OFF = 344,
PRAGMA_OPTIMIZE_ON = 345,
PRAGMA_OPTIMIZE_OFF = 346,
PRAGMA_WARNING_ON = 347,
PRAGMA_WARNING_OFF = 348,
PRAGMA_INVARIANT_ALL = 349,
LAYOUT_TOK = 350,
DOT_TOK = 351,
ASM = 352,
CLASS = 353,
UNION = 354,
ENUM = 355,
TYPEDEF = 356,
TEMPLATE = 357,
THIS = 358,
PACKED_TOK = 359,
GOTO = 360,
INLINE_TOK = 361,
NOINLINE = 362,
PUBLIC_TOK = 363,
STATIC = 364,
EXTERN = 365,
EXTERNAL = 366,
LONG_TOK = 367,
SHORT_TOK = 368,
HALF = 369,
FIXED_TOK = 370,
UNSIGNED = 371,
INPUT_TOK = 372,
HVEC2 = 373,
HVEC3 = 374,
HVEC4 = 375,
FVEC2 = 376,
FVEC3 = 377,
FVEC4 = 378,
SAMPLER3DRECT = 379,
SIZEOF = 380,
CAST = 381,
NAMESPACE = 382,
USING = 383,
RESOURCE = 384,
PATCH = 385,
SUBROUTINE = 386,
ERROR_TOK = 387,
COMMON = 388,
PARTITION = 389,
ACTIVE = 390,
FILTER = 391,
ROW_MAJOR = 392,
THEN = 393
};
#endif
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
#line 101 "src/compiler/glsl/glsl_parser.yy"
int n;
int64_t n64;
float real;
double dreal;
const char *identifier;
struct ast_type_qualifier type_qualifier;
ast_node *node;
ast_type_specifier *type_specifier;
ast_array_specifier *array_specifier;
ast_fully_specified_type *fully_specified_type;
ast_function *function;
ast_parameter_declarator *parameter_declarator;
ast_function_definition *function_definition;
ast_compound_statement *compound_statement;
ast_expression *expression;
ast_declarator_list *declarator_list;
ast_struct_specifier *struct_specifier;
ast_declaration *declaration;
ast_switch_body *switch_body;
ast_case_label *case_label;
ast_case_label_list *case_label_list;
ast_case_statement *case_statement;
ast_case_statement_list *case_statement_list;
ast_interface_block *interface_block;
ast_subroutine_list *subroutine_list;
struct {
ast_node *cond;
ast_expression *rest;
} for_rest_statement;
struct {
ast_node *then_statement;
ast_node *else_statement;
} selection_rest_statement;
const glsl_type *type;
#line 389 "src/compiler/glsl/glsl_parser.cpp"
};
typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1
#endif
#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
typedef struct YYLTYPE YYLTYPE;
struct YYLTYPE
{
int first_line;
int first_column;
int last_line;
int last_column;
};
# define YYLTYPE_IS_DECLARED 1
# define YYLTYPE_IS_TRIVIAL 1
#endif
int _mesa_glsl_parse (struct _mesa_glsl_parse_state *state);
#endif
#ifdef short
# undef short
#endif
#ifndef __PTRDIFF_MAX__
# include <limits.h>
# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stdint.h>
# define YY_STDINT_H
# endif
#endif
#ifdef __INT_LEAST8_MAX__
typedef __INT_LEAST8_TYPE__ yytype_int8;
#elif defined YY_STDINT_H
typedef int_least8_t yytype_int8;
#else
typedef signed char yytype_int8;
#endif
#ifdef __INT_LEAST16_MAX__
typedef __INT_LEAST16_TYPE__ yytype_int16;
#elif defined YY_STDINT_H
typedef int_least16_t yytype_int16;
#else
typedef short yytype_int16;
#endif
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
&& UINT_LEAST8_MAX <= INT_MAX)
typedef uint_least8_t yytype_uint8;
#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
typedef unsigned char yytype_uint8;
#else
typedef short yytype_uint8;
#endif
#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
typedef __UINT_LEAST16_TYPE__ yytype_uint16;
#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
&& UINT_LEAST16_MAX <= INT_MAX)
typedef uint_least16_t yytype_uint16;
#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
typedef unsigned short yytype_uint16;
#else
typedef int yytype_uint16;
#endif
#ifndef YYPTRDIFF_T
# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
# define YYPTRDIFF_T __PTRDIFF_TYPE__
# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
# elif defined PTRDIFF_MAX
# ifndef ptrdiff_t
# include <stddef.h>
# endif
# define YYPTRDIFF_T ptrdiff_t
# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
# else
# define YYPTRDIFF_T long
# define YYPTRDIFF_MAXIMUM LONG_MAX
# endif
#endif
#ifndef YYSIZE_T
# ifdef __SIZE_TYPE__
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
# include <stddef.h>
# define YYSIZE_T size_t
# else
# define YYSIZE_T unsigned
# endif
#endif
#define YYSIZE_MAXIMUM \
YY_CAST (YYPTRDIFF_T, \
(YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
? YYPTRDIFF_MAXIMUM \
: YY_CAST (YYSIZE_T, -1)))
#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
typedef yytype_int16 yy_state_t;
typedef int yy_state_fast_t;
#ifndef YY_
# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h>
# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
# endif
# endif
# ifndef YY_
# define YY_(Msgid) Msgid
# endif
#endif
#ifndef YY_ATTRIBUTE_PURE
# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
# else
# define YY_ATTRIBUTE_PURE
# endif
#endif
#ifndef YY_ATTRIBUTE_UNUSED
# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
# else
# define YY_ATTRIBUTE_UNUSED
# endif
#endif
#if ! defined lint || defined __GNUC__
# define YYUSE(E) ((void) (E))
#else
# define YYUSE(E)
#endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
_Pragma ("GCC diagnostic pop")
#else
# define YY_INITIAL_VALUE(Value) Value
#endif
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
#ifndef YY_INITIAL_VALUE
# define YY_INITIAL_VALUE(Value)
#endif
#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
# define YY_IGNORE_USELESS_CAST_BEGIN \
_Pragma ("GCC diagnostic push") \
_Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
# define YY_IGNORE_USELESS_CAST_END \
_Pragma ("GCC diagnostic pop")
#endif
#ifndef YY_IGNORE_USELESS_CAST_BEGIN
# define YY_IGNORE_USELESS_CAST_BEGIN
# define YY_IGNORE_USELESS_CAST_END
#endif
#define YY_ASSERT(E) ((void) (0 && (E)))
#if ! defined yyoverflow || YYERROR_VERBOSE
# ifdef YYSTACK_USE_ALLOCA
# if YYSTACK_USE_ALLOCA
# ifdef __GNUC__
# define YYSTACK_ALLOC __builtin_alloca
# elif defined __BUILTIN_VA_ARG_INCR
# include <alloca.h>
# elif defined _AIX
# define YYSTACK_ALLOC __alloca
# elif defined _MSC_VER
# include <malloc.h>
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
# include <stdlib.h>
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
# endif
# endif
# endif
# endif
# endif
# ifdef YYSTACK_ALLOC
# define YYSTACK_FREE(Ptr) do { ; } while (0)
# ifndef YYSTACK_ALLOC_MAXIMUM
# define YYSTACK_ALLOC_MAXIMUM 4032
# endif
# else
# define YYSTACK_ALLOC YYMALLOC
# define YYSTACK_FREE YYFREE
# ifndef YYSTACK_ALLOC_MAXIMUM
# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
# endif
# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
&& (defined YYFREE || defined free)))
# include <stdlib.h>
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
# endif
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
# if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T);
# endif
# endif
# ifndef YYFREE
# define YYFREE free
# if ! defined free && ! defined EXIT_SUCCESS
void free (void *);
# endif
# endif
# endif
#endif
#if (! defined yyoverflow \
&& (! defined __cplusplus \
|| (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
&& defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
union yyalloc
{
yy_state_t yyss_alloc;
YYSTYPE yyvs_alloc;
YYLTYPE yyls_alloc;
};
# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
# define YYSTACK_BYTES(N) \
((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE) \
+ YYSIZEOF (YYLTYPE)) \
+ 2 * YYSTACK_GAP_MAXIMUM)
# define YYCOPY_NEEDED 1
# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
do \
{ \
YYPTRDIFF_T yynewbytes; \
YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
Stack = &yyptr->Stack_alloc; \
yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
yyptr += yynewbytes / YYSIZEOF (*yyptr); \
} \
while (0)
#endif
#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
# ifndef YYCOPY
# if defined __GNUC__ && 1 < __GNUC__
# define YYCOPY(Dst, Src, Count) \
__builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
# else
# define YYCOPY(Dst, Src, Count) \
do \
{ \
YYPTRDIFF_T yyi; \
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
while (0)
# endif
# endif
#endif
#define YYFINAL 5
#define YYLAST 2514
#define YYNTOKENS 162
#define YYNNTS 111
#define YYNRULES 312
#define YYNSTATES 475
#define YYUNDEFTOK 2
#define YYMAXUTOK 393
#define YYTRANSLATE(YYX) \
(0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 146, 2, 2, 2, 150, 153, 2,
139, 140, 148, 144, 143, 145, 2, 149, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 157, 159,
151, 158, 152, 156, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 141, 2, 142, 154, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 160, 155, 161, 147, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
135, 136, 137, 138
};
#if YYDEBUG
static const yytype_int16 yyrline[] =
{
0, 295, 295, 294, 318, 320, 327, 337, 338, 339,
340, 341, 365, 370, 377, 379, 383, 384, 385, 389,
398, 406, 414, 425, 426, 430, 437, 444, 451, 458,
465, 472, 479, 486, 493, 494, 500, 504, 511, 517,
526, 530, 534, 538, 539, 543, 544, 548, 554, 566,
570, 576, 590, 591, 597, 603, 613, 614, 615, 616,
620, 621, 627, 633, 642, 643, 649, 658, 659, 665,
674, 675, 681, 687, 693, 702, 703, 709, 718, 719,
728, 729, 738, 739, 748, 749, 758, 759, 768, 769,
778, 779, 788, 789, 798, 799, 800, 801, 802, 803,
804, 805, 806, 807, 808, 812, 816, 832, 836, 841,
845, 850, 867, 871, 872, 876, 881, 889, 907, 918,
935, 950, 958, 975, 978, 986, 994, 1006, 1018, 1025,
1030, 1035, 1044, 1048, 1049, 1059, 1069, 1079, 1093, 1100,
1111, 1122, 1133, 1144, 1156, 1171, 1178, 1196, 1203, 1204,
1214, 1737, 1902, 1928, 1933, 1938, 1946, 1951, 1960, 1969,
1981, 1986, 1991, 2000, 2005, 2010, 2011, 2012, 2013, 2014,
2015, 2016, 2034, 2042, 2067, 2091, 2105, 2110, 2126, 2151,
2163, 2171, 2176, 2181, 2188, 2193, 2198, 2203, 2208, 2233,
2245, 2250, 2255, 2263, 2268, 2273, 2279, 2284, 2292, 2300,
2306, 2316, 2327, 2328, 2336, 2342, 2348, 2357, 2358, 2359,
2371, 2376, 2381, 2389, 2396, 2413, 2418, 2426, 2464, 2469,
2477, 2483, 2492, 2493, 2497, 2504, 2511, 2518, 2524, 2525,
2529, 2530, 2531, 2532, 2533, 2534, 2535, 2539, 2546, 2545,
2559, 2560, 2564, 2570, 2579, 2589, 2598, 2610, 2616, 2625,
2634, 2639, 2647, 2651, 2669, 2677, 2682, 2690, 2695, 2703,
2711, 2719, 2727, 2735, 2743, 2751, 2758, 2765, 2775, 2776,
2780, 2782, 2788, 2793, 2802, 2808, 2814, 2820, 2826, 2835,
2844, 2845, 2846, 2847, 2848, 2852, 2866, 2870, 2883, 2901,
2920, 2925, 2930, 2935, 2940, 2955, 2958, 2963, 2971, 2976,
2984, 3008, 3015, 3019, 3026, 3030, 3040, 3049, 3059, 3068,
3080, 3102, 3112
};
#endif
#if YYDEBUG || YYERROR_VERBOSE || 1
static const char *const yytname[] =
{
"$end", "error", "$undefined", "ATTRIBUTE", "CONST_TOK",
"BASIC_TYPE_TOK", "BREAK", "BUFFER", "CONTINUE", "DO", "ELSE", "FOR",
"IF", "DEMOTE", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT",
"CENTROID", "IN_TOK", "OUT_TOK", "INOUT_TOK", "UNIFORM", "VARYING",
"SAMPLE", "NOPERSPECTIVE", "FLAT", "SMOOTH", "IMAGE1DSHADOW",
"IMAGE2DSHADOW", "IMAGE1DARRAYSHADOW", "IMAGE2DARRAYSHADOW", "COHERENT",
"VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "SHARED", "STRUCT",
"VOID_TOK", "WHILE", "IDENTIFIER", "TYPE_IDENTIFIER", "NEW_IDENTIFIER",
"FLOATCONSTANT", "DOUBLECONSTANT", "INTCONSTANT", "UINTCONSTANT",
"BOOLCONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "FIELD_SELECTION",
"LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP",
"NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN",
"ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN",
"XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "INVARIANT", "PRECISE", "LOWP",
"MEDIUMP", "HIGHP", "SUPERP", "PRECISION", "VERSION_TOK", "EXTENSION",
"LINE", "COLON", "EOL", "INTERFACE", "OUTPUT", "PRAGMA_DEBUG_ON",
"PRAGMA_DEBUG_OFF", "PRAGMA_OPTIMIZE_ON", "PRAGMA_OPTIMIZE_OFF",
"PRAGMA_WARNING_ON", "PRAGMA_WARNING_OFF", "PRAGMA_INVARIANT_ALL",
"LAYOUT_TOK", "DOT_TOK", "ASM", "CLASS", "UNION", "ENUM", "TYPEDEF",
"TEMPLATE", "THIS", "PACKED_TOK", "GOTO", "INLINE_TOK", "NOINLINE",
"PUBLIC_TOK", "STATIC", "EXTERN", "EXTERNAL", "LONG_TOK", "SHORT_TOK",
"HALF", "FIXED_TOK", "UNSIGNED", "INPUT_TOK", "HVEC2", "HVEC3", "HVEC4",
"FVEC2", "FVEC3", "FVEC4", "SAMPLER3DRECT", "SIZEOF", "CAST",
"NAMESPACE", "USING", "RESOURCE", "PATCH", "SUBROUTINE", "ERROR_TOK",
"COMMON", "PARTITION", "ACTIVE", "FILTER", "ROW_MAJOR", "THEN", "'('",
"')'", "'['", "']'", "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'",
"'%'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'",
"'{'", "'}'", "$accept", "translation_unit", "$@1", "version_statement",
"pragma_statement", "extension_statement_list", "any_identifier",
"extension_statement", "external_declaration_list",
"variable_identifier", "primary_expression", "postfix_expression",
"integer_expression", "function_call", "function_call_or_method",
"function_call_generic", "function_call_header_no_parameters",
"function_call_header_with_parameters", "function_call_header",
"function_identifier", "unary_expression", "unary_operator",
"multiplicative_expression", "additive_expression", "shift_expression",
"relational_expression", "equality_expression", "and_expression",
"exclusive_or_expression", "inclusive_or_expression",
"logical_and_expression", "logical_xor_expression",
"logical_or_expression", "conditional_expression",
"assignment_expression", "assignment_operator", "expression",
"constant_expression", "declaration", "function_prototype",
"function_declarator", "function_header_with_parameters",
"function_header", "parameter_declarator", "parameter_declaration",
"parameter_qualifier", "parameter_direction_qualifier",
"parameter_type_specifier", "init_declarator_list", "single_declaration",
"fully_specified_type", "layout_qualifier", "layout_qualifier_id_list",
"layout_qualifier_id", "interface_block_layout_qualifier",
"subroutine_qualifier", "subroutine_type_list",
"interpolation_qualifier", "type_qualifier",
"auxiliary_storage_qualifier", "storage_qualifier", "memory_qualifier",
"array_specifier", "type_specifier", "type_specifier_nonarray",
"basic_type_specifier_nonarray", "precision_qualifier",
"struct_specifier", "struct_declaration_list", "struct_declaration",
"struct_declarator_list", "struct_declarator", "initializer",
"initializer_list", "declaration_statement", "statement",
"simple_statement", "compound_statement", "$@2",
"statement_no_new_scope", "compound_statement_no_new_scope",
"statement_list", "expression_statement", "selection_statement",
"selection_rest_statement", "condition", "switch_statement",
"switch_body", "case_label", "case_label_list", "case_statement",
"case_statement_list", "iteration_statement", "for_init_statement",
"conditionopt", "for_rest_statement", "jump_statement",
"demote_statement", "external_declaration", "function_definition",
"interface_block", "basic_interface_block", "interface_qualifier",
"instance_name_opt", "member_list", "member_declaration",
"layout_uniform_defaults", "layout_buffer_defaults",
"layout_in_defaults", "layout_out_defaults", "layout_defaults", YY_NULLPTR
};
#endif
# ifdef YYPRINT
static const yytype_int16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
325, 326, 327, 328, 329, 330, 331, 332, 333, 334,
335, 336, 337, 338, 339, 340, 341, 342, 343, 344,
345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
375, 376, 377, 378, 379, 380, 381, 382, 383, 384,
385, 386, 387, 388, 389, 390, 391, 392, 393, 40,
41, 91, 93, 44, 43, 45, 33, 126, 42, 47,
37, 60, 62, 38, 94, 124, 63, 58, 61, 59,
123, 125
};
# endif
#define YYPACT_NINF (-292)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
#define YYTABLE_NINF (-294)
#define yytable_value_is_error(Yyn) \
0
static const yytype_int16 yypact[] =
{
21, 64, 115, -292, 5, -292, 58, -292, -292, -292,
-292, 50, 154, 1766, -292, -292, 61, -292, -292, -292,
119, -292, 130, 136, -292, 168, -292, -292, -292, -292,
-292, -292, -292, -292, -292, -292, -292, -23, -292, -292,
2188, 2188, -292, -292, -292, 167, 132, 144, 147, 153,
170, 171, 175, 124, 261, -292, 134, -292, -292, 1667,
-292, -122, 141, 131, 173, -120, -292, 210, 2254, 2317,
2317, 31, 2383, 2317, 2383, -292, 135, -292, 2317, -292,
-292, -292, -292, -292, 241, -292, -292, -292, -292, -292,
154, 2125, 126, -292, -292, -292, -292, -292, -292, 2317,
2317, -292, 2317, -292, 2317, 2317, -292, -292, 31, -292,
-292, -292, -292, -292, -292, -292, 180, -292, 154, -292,
-292, -292, 815, -292, -292, 547, 547, -292, -292, -292,
547, -292, 2, 547, 547, 547, 154, -292, 149, 151,
-59, 155, -32, -31, -20, -17, -292, -292, -292, -292,
-292, -292, -292, -292, -292, -292, -292, -292, 2383, -292,
-292, 1859, 152, -292, 139, 212, 154, 944, -292, 2125,
145, -292, -292, -292, 148, -33, -292, -292, -292, 22,
146, 156, 1294, 163, 172, 160, 162, 1772, 177, 186,
-292, -292, -292, -292, -292, -292, -292, 1995, 1995, 1995,
-292, -292, -292, -292, -292, 165, -292, -292, -292, 123,
-292, -292, -292, 188, 32, 2027, 190, 273, 1995, 120,
13, 137, 15, 143, 159, 179, 181, 246, 247, -56,
-292, -292, -67, -292, 189, 195, -292, -292, -292, -292,
497, -292, -292, -292, -292, -292, -292, -292, -292, -292,
-292, -292, 31, 154, -292, -292, -292, -57, 1506, -55,
-292, -292, -292, -292, -292, -292, -292, -292, 205, -292,
1971, 2125, -292, 135, -63, -292, -292, -292, 1007, -292,
1995, -292, 180, -292, 154, -292, -292, 309, 1581, 1995,
-292, -292, -292, -54, 1995, 1917, -292, -292, 44, -292,
1294, -292, -292, 299, 1995, -292, -292, 1995, 213, -292,
-292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
-292, -292, 1995, -292, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, -292, -292, -292, -292, 154,
135, 1506, -50, 1506, -292, -292, 1506, -292, -292, 214,
154, 191, 2125, 152, 154, -292, -292, -292, -292, -292,
220, -292, -292, 1917, 46, -292, 71, 218, 154, 224,
-292, 656, -292, 223, 218, -292, -292, -292, -292, -292,
120, 120, 13, 13, 137, 137, 137, 137, 15, 15,
143, 159, 179, 181, 246, 247, 25, -292, -292, 152,
-292, 1506, -292, -109, -292, -292, -45, 323, -292, -292,
1995, -292, 215, 233, 1294, 216, 219, 1452, -292, -292,
1995, -292, 950, -292, -292, 135, 221, 73, 1995, 1452,
368, -292, -8, -292, 1506, -292, -292, -292, -292, -292,
-292, 152, -292, 222, 218, -292, 1294, 1995, 226, -292,
-292, 1136, 1294, -1, -292, -292, -292, 28, -292, -292,
-292, -292, -292, 1294, -292
};
static const yytype_int16 yydefact[] =
{
4, 0, 0, 14, 0, 1, 2, 16, 17, 18,
5, 0, 0, 0, 15, 6, 0, 185, 184, 208,
191, 181, 187, 188, 189, 190, 186, 182, 162, 161,
160, 193, 194, 195, 196, 197, 192, 0, 207, 206,
163, 164, 212, 211, 210, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 183, 156, 284, 282, 3,
281, 0, 0, 114, 123, 0, 133, 138, 168, 170,
167, 0, 165, 166, 169, 145, 202, 204, 171, 205,
20, 280, 111, 286, 0, 309, 310, 311, 312, 283,
0, 0, 0, 191, 187, 188, 190, 23, 24, 163,
164, 143, 168, 173, 165, 169, 144, 172, 0, 7,
8, 9, 10, 12, 13, 11, 0, 209, 0, 22,
21, 108, 0, 285, 112, 123, 123, 129, 130, 131,
123, 115, 0, 123, 123, 123, 0, 109, 16, 18,
139, 0, 191, 187, 188, 190, 175, 287, 301, 303,
305, 307, 176, 174, 146, 177, 294, 178, 168, 180,
288, 0, 203, 179, 0, 0, 0, 0, 215, 0,
0, 155, 154, 153, 150, 0, 148, 152, 158, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
30, 31, 26, 27, 32, 28, 29, 0, 0, 0,
56, 57, 58, 59, 247, 238, 242, 25, 34, 52,
36, 41, 42, 0, 0, 46, 0, 60, 0, 64,
67, 70, 75, 78, 80, 82, 84, 86, 88, 90,
92, 105, 0, 227, 0, 145, 230, 244, 229, 228,
0, 231, 232, 233, 234, 235, 236, 116, 124, 125,
121, 122, 0, 132, 126, 128, 127, 134, 0, 140,
117, 304, 306, 308, 302, 198, 60, 107, 0, 50,
0, 0, 19, 220, 0, 218, 214, 216, 0, 110,
0, 147, 0, 157, 0, 275, 274, 0, 0, 0,
279, 278, 276, 0, 0, 0, 53, 54, 0, 237,
0, 38, 39, 0, 0, 44, 43, 0, 207, 47,
49, 95, 96, 98, 97, 100, 101, 102, 103, 104,
99, 94, 0, 55, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 248, 243, 246, 245, 0,
118, 0, 135, 0, 222, 142, 0, 199, 200, 0,
0, 0, 298, 221, 0, 217, 213, 151, 149, 159,
0, 269, 268, 271, 0, 277, 0, 252, 0, 0,
33, 0, 37, 0, 40, 48, 93, 61, 62, 63,
65, 66, 68, 69, 73, 74, 71, 72, 76, 77,
79, 81, 83, 85, 87, 89, 0, 106, 119, 120,
137, 0, 225, 0, 141, 201, 0, 295, 299, 219,
0, 270, 0, 0, 0, 0, 0, 0, 239, 35,
0, 136, 0, 223, 300, 296, 0, 0, 272, 0,
251, 249, 0, 254, 0, 241, 265, 240, 91, 224,
226, 297, 289, 0, 273, 267, 0, 0, 0, 255,
259, 0, 263, 0, 253, 266, 250, 0, 258, 261,
260, 262, 256, 264, 257
};
static const yytype_int16 yypgoto[] =
{
-292, -292, -292, -292, -292, -292, 14, 9, -292, 53,
-292, -292, -292, -292, -292, -292, -292, -292, -292, -292,
157, -292, -107, -104, -97, -89, 42, 55, 45, 48,
56, 52, -292, -136, -152, -292, -143, -237, -5, -2,
-292, -292, -292, -292, 271, 236, -292, -292, -292, -292,
-90, 1, -292, 116, -292, -292, -292, -292, 317, -38,
-292, -9, -135, -13, -292, -292, 197, -292, 230, -137,
40, 37, -268, -292, 114, -153, -291, -292, -292, -36,
343, 105, 118, -292, -292, 34, -292, -292, -53, -292,
-51, -292, -292, -292, -292, -292, -292, -292, 350, -292,
-46, -292, 338, -292, 51, -292, 352, 355, 356, 361,
-292
};
static const yytype_int16 yydefgoto[] =
{
-1, 2, 13, 3, 58, 6, 273, 347, 59, 207,
208, 209, 383, 210, 211, 212, 213, 214, 215, 216,
217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
227, 228, 229, 230, 231, 322, 232, 268, 233, 234,
62, 63, 64, 250, 131, 132, 133, 251, 65, 66,
67, 102, 175, 176, 177, 69, 179, 70, 71, 72,
73, 105, 162, 269, 76, 77, 78, 79, 167, 168,
274, 275, 355, 413, 236, 237, 238, 239, 300, 446,
447, 240, 241, 242, 441, 379, 243, 443, 460, 461,
462, 463, 244, 373, 422, 423, 245, 246, 80, 81,
82, 83, 84, 436, 361, 362, 85, 86, 87, 88,
89
};
static const yytype_int16 yytable[] =
{
75, 166, 104, 104, 74, 259, 342, 19, 60, 457,
458, 61, -293, -290, 68, 14, 457, 458, 11, 7,
8, 9, 147, 136, -291, 267, 16, -292, 160, 287,
277, 104, 104, 359, 432, 104, 19, 121, 122, 137,
104, 37, 38, 367, 293, 39, 75, 7, 8, 9,
74, 92, 433, 104, 60, 134, 298, 61, 154, 74,
68, 104, 104, 309, 104, 74, 104, 104, 119, 68,
37, 38, 331, 332, 39, 158, 344, 166, 75, 166,
364, 140, 161, 410, 161, 412, 270, 348, 414, 344,
10, 270, 345, 101, 106, 170, 365, 53, 364, 258,
343, 351, 1, 356, 165, 375, 354, 281, 411, 235,
282, 4, 147, 74, 434, 5, 134, 134, 54, 253,
141, 134, 352, 158, 134, 134, 134, 261, 262, 104,
174, 104, 178, 252, 267, 15, 445, 91, 363, 263,
12, 277, 264, 431, 267, 90, 374, 54, 445, 74,
257, 376, 377, 459, 75, 385, 75, 327, 328, 158,
472, 384, 283, -293, 450, 284, 333, 334, 344, 235,
386, 344, 306, 74, -290, 307, 464, 126, 301, 302,
-291, 360, 430, 158, 380, 474, 424, 344, 166, 344,
329, 330, 407, 127, 128, 129, 7, 8, 9, 354,
406, 354, 335, 336, 354, 378, 31, 32, 33, 34,
35, 425, -292, 453, 344, 409, 344, 109, 171, 303,
390, 391, 7, 8, 9, 392, 393, 235, 348, 110,
377, 74, 111, 104, 394, 395, 396, 397, 112, 349,
104, 158, 108, 42, 43, 44, 398, 399, 130, 42,
43, 44, 138, 8, 139, 113, 114, 104, 75, 354,
115, 135, -51, 116, 304, 75, 117, 350, 324, 325,
326, 440, 360, 118, 125, 235, 161, 437, 448, 74,
354, 124, 235, 378, 172, 164, 169, 235, -23, 158,
-24, 74, 354, 270, 260, 454, 174, 272, 369, 271,
451, 158, 288, 466, 279, 285, 280, 340, 469, 471,
341, 289, 337, -113, 467, 286, 294, 173, 266, 290,
471, 291, 135, 135, 104, 295, 299, 135, 305, 310,
135, 135, 135, 338, -50, 104, 339, 311, 312, 313,
314, 315, 316, 317, 318, 319, 320, 357, 121, 75,
370, 382, 417, -45, 296, 297, 415, 103, 107, 420,
235, 344, 248, 408, 427, 429, 249, 435, 235, 254,
255, 256, 74, 439, 438, 323, 442, 444, 456, 400,
452, 465, 158, 468, 402, 146, 152, 153, 403, 155,
157, 159, 426, 401, 405, 163, 247, 404, 368, 278,
416, 419, 371, 455, 123, 381, 372, 421, 470, 120,
156, 235, 473, 418, 235, 74, 103, 107, 74, 146,
148, 155, 159, 149, 150, 158, 235, 266, 158, 151,
74, 321, 0, 0, 0, 0, 0, 266, 0, 0,
158, 0, 0, 235, 0, 0, 0, 74, 235, 235,
0, 0, 74, 74, 0, 0, 0, 158, 0, 0,
235, 0, 158, 158, 74, 0, 0, 0, 0, 0,
0, 0, 0, 0, 158, 146, 0, 0, 0, 0,
0, 387, 388, 389, 266, 266, 266, 266, 266, 266,
266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
17, 18, 19, 180, 20, 181, 182, 0, 183, 184,
185, 186, 187, 188, 0, 0, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 0, 0, 0, 0,
31, 32, 33, 34, 35, 36, 37, 38, 189, 97,
39, 98, 190, 191, 192, 193, 194, 195, 196, 0,
0, 126, 197, 198, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 127, 128, 129,
0, 40, 41, 42, 43, 44, 0, 45, 0, 12,
31, 32, 33, 34, 35, 0, 0, 0, 0, 0,
0, 0, 53, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 54, 0, 0, 0, 0, 0, 0,
0, 0, 130, 42, 43, 44, 0, 55, 56, 0,
0, 0, 0, 0, 0, 0, 199, 0, 0, 0,
0, 200, 201, 202, 203, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 204, 205, 346, 17,
18, 19, 180, 20, 181, 182, 0, 183, 184, 185,
186, 187, 188, 0, 0, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 0, 0, 0, 0, 31,
32, 33, 34, 35, 36, 37, 38, 189, 97, 39,
98, 190, 191, 192, 193, 194, 195, 196, 0, 0,
0, 197, 198, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40, 41, 42, 43, 44, 0, 45, 0, 12, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 53, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 55, 56, 0, 0,
0, 0, 0, 0, 0, 199, 0, 0, 0, 0,
200, 201, 202, 203, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 204, 205, 428, 17, 18,
19, 180, 20, 181, 182, 0, 183, 184, 185, 186,
187, 188, 0, 0, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 0, 0, 0, 0, 31, 32,
33, 34, 35, 36, 37, 38, 189, 97, 39, 98,
190, 191, 192, 193, 194, 195, 196, 0, 0, 0,
197, 198, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 40,
41, 42, 43, 44, 0, 45, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
53, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 54, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 55, 56, 17, 18, 19,
0, 93, 0, 0, 199, 19, 0, 0, 0, 200,
201, 202, 203, 21, 94, 95, 24, 96, 26, 27,
28, 29, 30, 0, 204, 205, 206, 31, 32, 33,
34, 35, 36, 37, 38, 0, 0, 39, 0, 37,
38, 0, 97, 39, 98, 190, 191, 192, 193, 194,
195, 196, 0, 0, 0, 197, 198, 0, 0, 0,
17, 18, 19, 0, 93, 0, 0, 0, 99, 100,
42, 43, 44, 0, 0, 0, 21, 94, 95, 24,
96, 26, 27, 28, 29, 30, 0, 0, 0, 53,
31, 32, 33, 34, 35, 36, 37, 38, 0, 0,
39, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54, 0, 0, 0, 0, 0, 54, 0, 0, 0,
0, 0, 0, 0, 55, 56, 0, 0, 0, 0,
0, 99, 100, 42, 43, 44, 0, 0, 0, 199,
0, 0, 0, 0, 200, 201, 202, 203, 0, 0,
0, 0, 53, 0, 0, 276, 0, 0, 0, 0,
353, 449, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 54, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 55, 56, 17,
18, 19, 180, 20, 181, 182, 0, 183, 184, 185,
186, 187, 188, 457, 458, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 0, 0, 0, 366, 31,
32, 33, 34, 35, 36, 37, 38, 189, 97, 39,
98, 190, 191, 192, 193, 194, 195, 196, 0, 0,
0, 197, 198, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40, 41, 42, 43, 44, 0, 45, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 53, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 55, 56, 0, 0,
0, 0, 0, 0, 0, 199, 0, 0, 0, 0,
200, 201, 202, 203, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 204, 205, 17, 18, 19,
180, 20, 181, 182, 0, 183, 184, 185, 186, 187,
188, 0, 0, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 0, 0, 0, 0, 31, 32, 33,
34, 35, 36, 37, 38, 189, 97, 39, 98, 190,
191, 192, 193, 194, 195, 196, 0, 0, 0, 197,
198, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 40, 41,
42, 43, 44, 0, 45, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 53,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 55, 56, 0, 0, 0, 0,
0, 0, 0, 199, 0, 0, 0, 0, 200, 201,
202, 203, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 204, 205, 17, 18, 19, 180, 20,
181, 182, 0, 183, 184, 185, 186, 187, 188, 0,
0, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 0, 0, 0, 0, 31, 32, 33, 34, 35,
36, 37, 38, 189, 97, 39, 98, 190, 191, 192,
193, 194, 195, 196, 0, 0, 0, 197, 198, 0,
0, 19, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 40, 41, 42, 43,
44, 0, 45, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 37, 38, 53, 97, 39,
98, 190, 191, 192, 193, 194, 195, 196, 0, 0,
0, 197, 198, 0, 0, 0, 0, 0, 54, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 55, 56, 17, 18, 19, 0, 20, 0,
0, 199, 0, 0, 0, 0, 200, 201, 202, 203,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
0, 204, 122, 0, 31, 32, 33, 34, 35, 36,
37, 38, 54, 97, 39, 98, 190, 191, 192, 193,
194, 195, 196, 0, 0, 0, 197, 198, 0, 0,
0, 0, 0, 0, 0, 199, 0, 0, 0, 0,
200, 201, 202, 203, 0, 40, 41, 42, 43, 44,
0, 45, 0, 0, 0, 0, 353, 0, 0, 0,
17, 18, 19, 0, 20, 0, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 0, 54, 0, 0,
31, 32, 33, 34, 35, 36, 37, 38, 0, 0,
39, 55, 56, 0, 0, 0, 0, 0, 0, 0,
199, 0, 0, 0, 0, 200, 201, 202, 203, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
204, 40, 41, 42, 43, 44, 0, 45, 0, 12,
0, 0, 0, 0, 0, 46, 47, 48, 49, 50,
51, 52, 53, 0, 0, 0, 0, 0, 0, 17,
18, 19, 0, 20, 0, 0, 0, 19, 0, 0,
0, 0, 0, 54, 0, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 0, 0, 55, 56, 31,
32, 33, 34, 35, 36, 37, 38, 0, 0, 39,
0, 37, 38, 0, 97, 39, 98, 190, 191, 192,
193, 194, 195, 196, 0, 0, 57, 197, 198, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
40, 41, 42, 43, 44, 0, 45, 0, 0, 0,
0, 0, 0, 0, 46, 47, 48, 49, 50, 51,
52, 53, 0, 0, 19, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 54, 0, 0, 0, 0, 0, 54, 0,
0, 0, 0, 0, 0, 0, 55, 56, 37, 38,
0, 97, 39, 98, 190, 191, 192, 193, 194, 195,
196, 199, 0, 0, 197, 198, 200, 201, 202, 203,
17, 18, 19, 0, 93, 57, 0, 0, 0, 0,
0, 292, 0, 0, 0, 0, 21, 94, 95, 24,
96, 26, 27, 28, 29, 30, 0, 0, 0, 0,
31, 32, 33, 34, 35, 36, 37, 38, 0, 97,
39, 98, 190, 191, 192, 193, 194, 195, 196, 0,
0, 0, 197, 198, 0, 54, 19, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 99, 100, 42, 43, 44, 0, 0, 199, 0,
19, 265, 0, 200, 201, 202, 203, 0, 0, 0,
37, 38, 53, 97, 39, 98, 190, 191, 192, 193,
194, 195, 196, 0, 0, 0, 197, 198, 0, 0,
0, 0, 19, 54, 37, 38, 0, 97, 39, 98,
190, 191, 192, 193, 194, 195, 196, 55, 56, 0,
197, 198, 0, 0, 0, 0, 199, 0, 0, 0,
0, 200, 201, 202, 203, 0, 37, 308, 0, 97,
39, 98, 190, 191, 192, 193, 194, 195, 196, 0,
0, 0, 197, 198, 0, 0, 0, 54, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
199, 54, 0, 358, 0, 200, 201, 202, 203, 0,
0, 0, 0, 0, 0, 0, 0, 0, 17, 18,
19, 0, 93, 0, 199, 0, 0, 0, 0, 200,
201, 202, 203, 54, 21, 94, 95, 24, 96, 26,
27, 28, 29, 30, 0, 0, 0, 0, 31, 32,
33, 34, 35, 36, 37, 38, 199, 0, 39, 0,
0, 200, 201, 202, 203, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 17, 18, 0, 0, 93, 0, 0, 0, 99,
100, 42, 43, 44, 0, 0, 0, 21, 94, 95,
24, 96, 26, 27, 28, 29, 30, 0, 0, 0,
53, 31, 32, 33, 34, 35, 36, 0, 0, 0,
97, 0, 98, 0, 0, 0, 0, 0, 0, 0,
0, 54, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 55, 56, 17, 18, 0,
0, 142, 99, 100, 42, 43, 44, 0, 0, 0,
0, 0, 0, 21, 143, 144, 24, 145, 26, 27,
28, 29, 30, 53, 0, 0, 0, 31, 32, 33,
34, 35, 36, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 55, 56,
17, 18, 0, 0, 93, 0, 0, 0, 99, 100,
42, 43, 44, 0, 0, 0, 21, 94, 95, 24,
96, 26, 27, 28, 29, 30, 0, 0, 0, 53,
31, 32, 33, 34, 35, 36, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 55, 56, 17, 18, 0, 0,
20, 99, 100, 42, 43, 44, 0, 0, 0, 0,
0, 0, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 53, 0, 0, 0, 31, 32, 33, 34,
35, 36, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 55, 56, 0,
0, 0, 0, 0, 0, 0, 0, 99, 100, 42,
43, 44, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 53, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 55, 56
};
static const yytype_int16 yycheck[] =
{
13, 91, 40, 41, 13, 140, 62, 5, 13, 17,
18, 13, 44, 44, 13, 6, 17, 18, 4, 42,
43, 44, 68, 143, 44, 161, 12, 44, 74, 182,
167, 69, 70, 270, 143, 73, 5, 159, 160, 159,
78, 39, 40, 280, 187, 43, 59, 42, 43, 44,
59, 37, 161, 91, 59, 64, 199, 59, 71, 68,
59, 99, 100, 215, 102, 74, 104, 105, 59, 68,
39, 40, 57, 58, 43, 74, 143, 167, 91, 169,
143, 67, 141, 351, 141, 353, 141, 240, 356, 143,
85, 141, 159, 40, 41, 108, 159, 95, 143, 158,
156, 158, 81, 158, 90, 159, 258, 140, 158, 122,
143, 47, 158, 122, 159, 0, 125, 126, 116, 132,
67, 130, 257, 122, 133, 134, 135, 159, 159, 167,
116, 169, 118, 132, 270, 85, 427, 160, 273, 159,
82, 278, 159, 411, 280, 84, 289, 116, 439, 158,
136, 294, 295, 161, 167, 307, 169, 144, 145, 158,
161, 304, 140, 44, 432, 143, 151, 152, 143, 182,
322, 143, 140, 182, 44, 143, 444, 4, 55, 56,
44, 271, 157, 182, 140, 157, 140, 143, 278, 143,
53, 54, 344, 20, 21, 22, 42, 43, 44, 351,
343, 353, 59, 60, 356, 295, 33, 34, 35, 36,
37, 140, 44, 140, 143, 350, 143, 85, 38, 96,
327, 328, 42, 43, 44, 329, 330, 240, 381, 85,
373, 240, 85, 271, 331, 332, 333, 334, 85, 252,
278, 240, 45, 76, 77, 78, 335, 336, 75, 76,
77, 78, 42, 43, 44, 85, 85, 295, 271, 411,
85, 64, 139, 139, 141, 278, 5, 253, 148, 149,
150, 424, 362, 139, 143, 288, 141, 420, 430, 288,
432, 140, 295, 373, 104, 44, 160, 300, 139, 288,
139, 300, 444, 141, 139, 438, 282, 85, 284, 160,
435, 300, 139, 456, 159, 159, 158, 61, 461, 462,
63, 139, 153, 140, 457, 159, 139, 137, 161, 159,
473, 159, 125, 126, 362, 139, 161, 130, 140, 139,
133, 134, 135, 154, 139, 373, 155, 64, 65, 66,
67, 68, 69, 70, 71, 72, 73, 142, 159, 362,
41, 52, 161, 140, 197, 198, 142, 40, 41, 139,
373, 143, 126, 349, 140, 142, 130, 44, 381, 133,
134, 135, 381, 140, 159, 218, 160, 158, 10, 337,
159, 159, 381, 157, 339, 68, 69, 70, 340, 72,
73, 74, 378, 338, 342, 78, 125, 341, 282, 169,
360, 364, 288, 439, 61, 300, 288, 373, 461, 59,
72, 424, 463, 362, 427, 424, 99, 100, 427, 102,
68, 104, 105, 68, 68, 424, 439, 270, 427, 68,
439, 158, -1, -1, -1, -1, -1, 280, -1, -1,
439, -1, -1, 456, -1, -1, -1, 456, 461, 462,
-1, -1, 461, 462, -1, -1, -1, 456, -1, -1,
473, -1, 461, 462, 473, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 473, 158, -1, -1, -1, -1,
-1, 324, 325, 326, 327, 328, 329, 330, 331, 332,
333, 334, 335, 336, 337, 338, 339, 340, 341, 342,
3, 4, 5, 6, 7, 8, 9, -1, 11, 12,
13, 14, 15, 16, -1, -1, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, -1, -1, -1, -1,
33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, -1,
-1, 4, 55, 56, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 20, 21, 22,
-1, 74, 75, 76, 77, 78, -1, 80, -1, 82,
33, 34, 35, 36, 37, -1, -1, -1, -1, -1,
-1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 116, -1, -1, -1, -1, -1, -1,
-1, -1, 75, 76, 77, 78, -1, 130, 131, -1,
-1, -1, -1, -1, -1, -1, 139, -1, -1, -1,
-1, 144, 145, 146, 147, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 159, 160, 161, 3,
4, 5, 6, 7, 8, 9, -1, 11, 12, 13,
14, 15, 16, -1, -1, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, -1, -1, -1, -1, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, -1, -1,
-1, 55, 56, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
74, 75, 76, 77, 78, -1, 80, -1, 82, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 116, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 130, 131, -1, -1,
-1, -1, -1, -1, -1, 139, -1, -1, -1, -1,
144, 145, 146, 147, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 159, 160, 161, 3, 4,
5, 6, 7, 8, 9, -1, 11, 12, 13, 14,
15, 16, -1, -1, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, -1, -1, -1, -1, 33, 34,
35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, -1, -1, -1,
55, 56, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 74,
75, 76, 77, 78, -1, 80, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 116, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 130, 131, 3, 4, 5,
-1, 7, -1, -1, 139, 5, -1, -1, -1, 144,
145, 146, 147, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, -1, 159, 160, 161, 33, 34, 35,
36, 37, 38, 39, 40, -1, -1, 43, -1, 39,
40, -1, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, -1, -1, -1, 55, 56, -1, -1, -1,
3, 4, 5, -1, 7, -1, -1, -1, 74, 75,
76, 77, 78, -1, -1, -1, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, -1, -1, -1, 95,
33, 34, 35, 36, 37, 38, 39, 40, -1, -1,
43, -1, -1, -1, -1, -1, -1, -1, -1, -1,
116, -1, -1, -1, -1, -1, 116, -1, -1, -1,
-1, -1, -1, -1, 130, 131, -1, -1, -1, -1,
-1, 74, 75, 76, 77, 78, -1, -1, -1, 139,
-1, -1, -1, -1, 144, 145, 146, 147, -1, -1,
-1, -1, 95, -1, -1, 161, -1, -1, -1, -1,
160, 161, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 116, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 130, 131, 3,
4, 5, 6, 7, 8, 9, -1, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, -1, -1, -1, 161, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, -1, -1,
-1, 55, 56, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
74, 75, 76, 77, 78, -1, 80, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 95, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 116, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 130, 131, -1, -1,
-1, -1, -1, -1, -1, 139, -1, -1, -1, -1,
144, 145, 146, 147, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 159, 160, 3, 4, 5,
6, 7, 8, 9, -1, 11, 12, 13, 14, 15,
16, -1, -1, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, -1, -1, -1, -1, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, -1, -1, -1, 55,
56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 74, 75,
76, 77, 78, -1, 80, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 95,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
116, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 130, 131, -1, -1, -1, -1,
-1, -1, -1, 139, -1, -1, -1, -1, 144, 145,
146, 147, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 159, 160, 3, 4, 5, 6, 7,
8, 9, -1, 11, 12, 13, 14, 15, 16, -1,
-1, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, -1, -1, -1, -1, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, -1, -1, -1, 55, 56, -1,
-1, 5, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 74, 75, 76, 77,
78, -1, 80, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 39, 40, 95, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, -1, -1,
-1, 55, 56, -1, -1, -1, -1, -1, 116, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 130, 131, 3, 4, 5, -1, 7, -1,
-1, 139, -1, -1, -1, -1, 144, 145, 146, 147,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
-1, 159, 160, -1, 33, 34, 35, 36, 37, 38,
39, 40, 116, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, -1, -1, -1, 55, 56, -1, -1,
-1, -1, -1, -1, -1, 139, -1, -1, -1, -1,
144, 145, 146, 147, -1, 74, 75, 76, 77, 78,
-1, 80, -1, -1, -1, -1, 160, -1, -1, -1,
3, 4, 5, -1, 7, -1, 95, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, -1, 116, -1, -1,
33, 34, 35, 36, 37, 38, 39, 40, -1, -1,
43, 130, 131, -1, -1, -1, -1, -1, -1, -1,
139, -1, -1, -1, -1, 144, 145, 146, 147, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
159, 74, 75, 76, 77, 78, -1, 80, -1, 82,
-1, -1, -1, -1, -1, 88, 89, 90, 91, 92,
93, 94, 95, -1, -1, -1, -1, -1, -1, 3,
4, 5, -1, 7, -1, -1, -1, 5, -1, -1,
-1, -1, -1, 116, -1, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, -1, -1, 130, 131, 33,
34, 35, 36, 37, 38, 39, 40, -1, -1, 43,
-1, 39, 40, -1, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, -1, -1, 159, 55, 56, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
74, 75, 76, 77, 78, -1, 80, -1, -1, -1,
-1, -1, -1, -1, 88, 89, 90, 91, 92, 93,
94, 95, -1, -1, 5, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 116, -1, -1, -1, -1, -1, 116, -1,
-1, -1, -1, -1, -1, -1, 130, 131, 39, 40,
-1, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 139, -1, -1, 55, 56, 144, 145, 146, 147,
3, 4, 5, -1, 7, 159, -1, -1, -1, -1,
-1, 159, -1, -1, -1, -1, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, -1, -1, -1, -1,
33, 34, 35, 36, 37, 38, 39, 40, -1, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, -1,
-1, -1, 55, 56, -1, 116, 5, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 74, 75, 76, 77, 78, -1, -1, 139, -1,
5, 142, -1, 144, 145, 146, 147, -1, -1, -1,
39, 40, 95, 42, 43, 44, 45, 46, 47, 48,
49, 50, 51, -1, -1, -1, 55, 56, -1, -1,
-1, -1, 5, 116, 39, 40, -1, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 130, 131, -1,
55, 56, -1, -1, -1, -1, 139, -1, -1, -1,
-1, 144, 145, 146, 147, -1, 39, 40, -1, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, -1,
-1, -1, 55, 56, -1, -1, -1, 116, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
139, 116, -1, 142, -1, 144, 145, 146, 147, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
5, -1, 7, -1, 139, -1, -1, -1, -1, 144,
145, 146, 147, 116, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, -1, -1, -1, -1, 33, 34,
35, 36, 37, 38, 39, 40, 139, -1, 43, -1,
-1, 144, 145, 146, 147, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 3, 4, -1, -1, 7, -1, -1, -1, 74,
75, 76, 77, 78, -1, -1, -1, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, -1, -1, -1,
95, 33, 34, 35, 36, 37, 38, -1, -1, -1,
42, -1, 44, -1, -1, -1, -1, -1, -1, -1,
-1, 116, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, 130, 131, 3, 4, -1,
-1, 7, 74, 75, 76, 77, 78, -1, -1, -1,
-1, -1, -1, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 95, -1, -1, -1, 33, 34, 35,
36, 37, 38, -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, 130, 131,
3, 4, -1, -1, 7, -1, -1, -1, 74, 75,
76, 77, 78, -1, -1, -1, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, -1, -1, -1, 95,
33, 34, 35, 36, 37, 38, -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, 130, 131, 3, 4, -1, -1,
7, 74, 75, 76, 77, 78, -1, -1, -1, -1,
-1, -1, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 95, -1, -1, -1, 33, 34, 35, 36,
37, 38, -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, 130, 131, -1,
-1, -1, -1, -1, -1, -1, -1, 74, 75, 76,
77, 78, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 95, -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, 130, 131
};
static const yytype_int16 yystos[] =
{
0, 81, 163, 165, 47, 0, 167, 42, 43, 44,
85, 168, 82, 164, 169, 85, 168, 3, 4, 5,
7, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 33, 34, 35, 36, 37, 38, 39, 40, 43,
74, 75, 76, 77, 78, 80, 88, 89, 90, 91,
92, 93, 94, 95, 116, 130, 131, 159, 166, 170,
200, 201, 202, 203, 204, 210, 211, 212, 213, 217,
219, 220, 221, 222, 223, 225, 226, 227, 228, 229,
260, 261, 262, 263, 264, 268, 269, 270, 271, 272,
84, 160, 168, 7, 20, 21, 23, 42, 44, 74,
75, 171, 213, 220, 221, 223, 171, 220, 228, 85,
85, 85, 85, 85, 85, 85, 139, 5, 139, 169,
260, 159, 160, 242, 140, 143, 4, 20, 21, 22,
75, 206, 207, 208, 223, 228, 143, 159, 42, 44,
168, 171, 7, 20, 21, 23, 220, 262, 268, 269,
270, 271, 220, 220, 225, 220, 264, 220, 213, 220,
262, 141, 224, 220, 44, 168, 212, 230, 231, 160,
225, 38, 104, 137, 168, 214, 215, 216, 168, 218,
6, 8, 9, 11, 12, 13, 14, 15, 16, 41,
45, 46, 47, 48, 49, 50, 51, 55, 56, 139,
144, 145, 146, 147, 159, 160, 161, 171, 172, 173,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
195, 196, 198, 200, 201, 225, 236, 237, 238, 239,
243, 244, 245, 248, 254, 258, 259, 206, 207, 207,
205, 209, 213, 225, 207, 207, 207, 168, 158, 224,
139, 159, 159, 159, 159, 142, 182, 195, 199, 225,
141, 160, 85, 168, 232, 233, 161, 231, 230, 159,
158, 140, 143, 140, 143, 159, 159, 237, 139, 139,
159, 159, 159, 198, 139, 139, 182, 182, 198, 161,
240, 55, 56, 96, 141, 140, 140, 143, 40, 196,
139, 64, 65, 66, 67, 68, 69, 70, 71, 72,
73, 158, 197, 182, 148, 149, 150, 144, 145, 53,
54, 57, 58, 151, 152, 59, 60, 153, 154, 155,
61, 63, 62, 156, 143, 159, 161, 169, 237, 225,
168, 158, 224, 160, 196, 234, 158, 142, 142, 199,
212, 266, 267, 224, 143, 159, 161, 199, 215, 168,
41, 236, 244, 255, 198, 159, 198, 198, 212, 247,
140, 243, 52, 174, 198, 196, 196, 182, 182, 182,
184, 184, 185, 185, 186, 186, 186, 186, 187, 187,
188, 189, 190, 191, 192, 193, 198, 196, 168, 224,
234, 158, 234, 235, 234, 142, 232, 161, 266, 233,
139, 247, 256, 257, 140, 140, 168, 140, 161, 142,
157, 234, 143, 161, 159, 44, 265, 198, 159, 140,
237, 246, 160, 249, 158, 238, 241, 242, 196, 161,
234, 224, 159, 140, 198, 241, 10, 17, 18, 161,
250, 251, 252, 253, 234, 159, 237, 198, 157, 237,
250, 237, 161, 252, 157
};
static const yytype_int16 yyr1[] =
{
0, 162, 164, 163, 165, 165, 165, 166, 166, 166,
166, 166, 166, 166, 167, 167, 168, 168, 168, 169,
170, 170, 170, 171, 171, 172, 172, 172, 172, 172,
172, 172, 172, 172, 173, 173, 173, 173, 173, 173,
174, 175, 176, 177, 177, 178, 178, 179, 179, 180,
181, 181, 182, 182, 182, 182, 183, 183, 183, 183,
184, 184, 184, 184, 185, 185, 185, 186, 186, 186,
187, 187, 187, 187, 187, 188, 188, 188, 189, 189,
190, 190, 191, 191, 192, 192, 193, 193, 194, 194,
195, 195, 196, 196, 197, 197, 197, 197, 197, 197,
197, 197, 197, 197, 197, 198, 198, 199, 200, 200,
200, 200, 201, 202, 202, 203, 203, 204, 205, 205,
205, 206, 206, 207, 207, 207, 207, 207, 207, 208,
208, 208, 209, 210, 210, 210, 210, 210, 211, 211,
211, 211, 211, 211, 211, 212, 212, 213, 214, 214,
215, 215, 215, 216, 216, 216, 217, 217, 218, 218,
219, 219, 219, 220, 220, 220, 220, 220, 220, 220,
220, 220, 220, 220, 220, 220, 220, 220, 220, 220,
220, 221, 221, 221, 222, 222, 222, 222, 222, 222,
222, 222, 222, 223, 223, 223, 223, 223, 224, 224,
224, 224, 225, 225, 226, 226, 226, 227, 227, 227,
228, 228, 228, 229, 229, 230, 230, 231, 232, 232,
233, 233, 234, 234, 234, 235, 235, 236, 237, 237,
238, 238, 238, 238, 238, 238, 238, 239, 240, 239,
241, 241, 242, 242, 243, 243, 243, 244, 244, 245,
246, 246, 247, 247, 248, 249, 249, 250, 250, 251,
251, 252, 252, 253, 253, 254, 254, 254, 255, 255,
256, 256, 257, 257, 258, 258, 258, 258, 258, 259,
260, 260, 260, 260, 260, 261, 262, 262, 262, 263,
264, 264, 264, 264, 264, 265, 265, 265, 266, 266,
267, 268, 268, 269, 269, 270, 270, 271, 271, 272,
272, 272, 272
};
static const yytype_int8 yyr2[] =
{
0, 2, 0, 4, 0, 3, 4, 2, 2, 2,
2, 2, 2, 2, 0, 2, 1, 1, 1, 5,
1, 2, 2, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 3, 1, 4, 1, 3, 2, 2,
1, 1, 1, 2, 2, 2, 1, 2, 3, 2,
1, 1, 1, 2, 2, 2, 1, 1, 1, 1,
1, 3, 3, 3, 1, 3, 3, 1, 3, 3,
1, 3, 3, 3, 3, 1, 3, 3, 1, 3,
1, 3, 1, 3, 1, 3, 1, 3, 1, 3,
1, 5, 1, 3, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 3, 1, 2, 2,
4, 1, 2, 1, 1, 2, 3, 3, 2, 3,
3, 2, 2, 0, 2, 2, 2, 2, 2, 1,
1, 1, 1, 1, 3, 4, 6, 5, 1, 2,
3, 5, 4, 2, 2, 1, 2, 4, 1, 3,
1, 3, 1, 1, 1, 1, 1, 4, 1, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 2, 2, 2, 2, 2, 2, 2, 2,
2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
3, 4, 1, 2, 1, 1, 1, 1, 1, 2,
1, 1, 1, 5, 4, 1, 2, 3, 1, 3,
1, 2, 1, 3, 4, 1, 3, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 0, 4,
1, 1, 2, 3, 1, 2, 2, 1, 2, 5,
3, 1, 1, 4, 5, 2, 3, 3, 2, 1,
2, 2, 2, 1, 2, 5, 7, 6, 1, 1,
1, 0, 2, 3, 2, 2, 2, 3, 2, 2,
1, 1, 1, 1, 1, 2, 1, 2, 2, 7,
1, 1, 1, 1, 2, 0, 1, 2, 1, 2,
3, 2, 3, 2, 3, 2, 3, 2, 3, 1,
1, 1, 1
};
#define yyerrok (yyerrstatus = 0)
#define yyclearin (yychar = YYEMPTY)
#define YYEMPTY (-2)
#define YYEOF 0
#define YYACCEPT goto yyacceptlab
#define YYABORT goto yyabortlab
#define YYERROR goto yyerrorlab
#define YYRECOVERING() (!!yyerrstatus)
#define YYBACKUP(Token, Value) \
do \
if (yychar == YYEMPTY) \
{ \
yychar = (Token); \
yylval = (Value); \
YYPOPSTACK (yylen); \
yystate = *yyssp; \
goto yybackup; \
} \
else \
{ \
yyerror (&yylloc, state, YY_("syntax error: cannot back up")); \
YYERROR; \
} \
while (0)
#define YYTERROR 1
#define YYERRCODE 256
#ifndef YYLLOC_DEFAULT
# define YYLLOC_DEFAULT(Current, Rhs, N) \
do \
if (N) \
{ \
(Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
(Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
(Current).last_line = YYRHSLOC (Rhs, N).last_line; \
(Current).last_column = YYRHSLOC (Rhs, N).last_column; \
} \
else \
{ \
(Current).first_line = (Current).last_line = \
YYRHSLOC (Rhs, 0).last_line; \
(Current).first_column = (Current).last_column = \
YYRHSLOC (Rhs, 0).last_column; \
} \
while (0)
#endif
#define YYRHSLOC(Rhs, K) ((Rhs)[K])
#if YYDEBUG
# ifndef YYFPRINTF
# include <stdio.h>
# define YYFPRINTF fprintf
# endif
# define YYDPRINTF(Args) \
do { \
if (yydebug) \
YYFPRINTF Args; \
} while (0)
#ifndef YY_LOCATION_PRINT
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
YY_ATTRIBUTE_UNUSED
static int
yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp)
{
int res = 0;
int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0;
if (0 <= yylocp->first_line)
{
res += YYFPRINTF (yyo, "%d", yylocp->first_line);
if (0 <= yylocp->first_column)
res += YYFPRINTF (yyo, ".%d", yylocp->first_column);
}
if (0 <= yylocp->last_line)
{
if (yylocp->first_line < yylocp->last_line)
{
res += YYFPRINTF (yyo, "-%d", yylocp->last_line);
if (0 <= end_col)
res += YYFPRINTF (yyo, ".%d", end_col);
}
else if (0 <= end_col && yylocp->first_column < end_col)
res += YYFPRINTF (yyo, "-%d", end_col);
}
return res;
}
# define YY_LOCATION_PRINT(File, Loc) \
yy_location_print_ (File, &(Loc))
# else
# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
# endif
#endif
# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
do { \
if (yydebug) \
{ \
YYFPRINTF (stderr, "%s ", Title); \
yy_symbol_print (stderr, \
Type, Value, Location, state); \
YYFPRINTF (stderr, "\n"); \
} \
} while (0)
static void
yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct _mesa_glsl_parse_state *state)
{
FILE *yyoutput = yyo;
YYUSE (yyoutput);
YYUSE (yylocationp);
YYUSE (state);
if (!yyvaluep)
return;
# ifdef YYPRINT
if (yytype < YYNTOKENS)
YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
# endif
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YYUSE (yytype);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
static void
yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, struct _mesa_glsl_parse_state *state)
{
YYFPRINTF (yyo, "%s %s (",
yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
YY_LOCATION_PRINT (yyo, *yylocationp);
YYFPRINTF (yyo, ": ");
yy_symbol_value_print (yyo, yytype, yyvaluep, yylocationp, state);
YYFPRINTF (yyo, ")");
}
static void
yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
{
int yybot = *yybottom;
YYFPRINTF (stderr, " %d", yybot);
}
YYFPRINTF (stderr, "\n");
}
# define YY_STACK_PRINT(Bottom, Top) \
do { \
if (yydebug) \
yy_stack_print ((Bottom), (Top)); \
} while (0)
static void
yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, struct _mesa_glsl_parse_state *state)
{
int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
yyrule - 1, yylno);
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
yy_symbol_print (stderr,
yystos[yyssp[yyi + 1 - yynrhs]],
&yyvsp[(yyi + 1) - (yynrhs)]
, &(yylsp[(yyi + 1) - (yynrhs)]) , state);
YYFPRINTF (stderr, "\n");
}
}
# define YY_REDUCE_PRINT(Rule) \
do { \
if (yydebug) \
yy_reduce_print (yyssp, yyvsp, yylsp, Rule, state); \
} while (0)
int yydebug;
#else
# define YYDPRINTF(Args)
# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
# define YY_STACK_PRINT(Bottom, Top)
# define YY_REDUCE_PRINT(Rule)
#endif
#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
#ifndef YYMAXDEPTH
# define YYMAXDEPTH 10000
#endif
#if YYERROR_VERBOSE
# ifndef yystrlen
# if defined __GLIBC__ && defined _STRING_H
# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S)))
# else
static YYPTRDIFF_T
yystrlen (const char *yystr)
{
YYPTRDIFF_T yylen;
for (yylen = 0; yystr[yylen]; yylen++)
continue;
return yylen;
}
# endif
# endif
# ifndef yystpcpy
# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
# define yystpcpy stpcpy
# else
static char *
yystpcpy (char *yydest, const char *yysrc)
{
char *yyd = yydest;
const char *yys = yysrc;
while ((*yyd++ = *yys++) != '\0')
continue;
return yyd - 1;
}
# endif
# endif
# ifndef yytnamerr
static YYPTRDIFF_T
yytnamerr (char *yyres, const char *yystr)
{
if (*yystr == '"')
{
YYPTRDIFF_T yyn = 0;
char const *yyp = yystr;
for (;;)
switch (*++yyp)
{
case '\'':
case ',':
goto do_not_strip_quotes;
case '\\':
if (*++yyp != '\\')
goto do_not_strip_quotes;
else
goto append;
append:
default:
if (yyres)
yyres[yyn] = *yyp;
yyn++;
break;
case '"':
if (yyres)
yyres[yyn] = '\0';
return yyn;
}
do_not_strip_quotes: ;
}
if (yyres)
return yystpcpy (yyres, yystr) - yyres;
else
return yystrlen (yystr);
}
# endif
static int
yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg,
yy_state_t *yyssp, int yytoken)
{
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
const char *yyformat = YY_NULLPTR;
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
int yycount = 0;
YYPTRDIFF_T yysize = 0;
if (yytoken != YYEMPTY)
{
int yyn = yypact[*yyssp];
YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
yysize = yysize0;
yyarg[yycount++] = yytname[yytoken];
if (!yypact_value_is_default (yyn))
{
int yyxbegin = yyn < 0 ? -yyn : 0;
int yychecklim = YYLAST - yyn + 1;
int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
int yyx;
for (yyx = yyxbegin; yyx < yyxend; ++yyx)
if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
&& !yytable_value_is_error (yytable[yyx + yyn]))
{
if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
{
yycount = 1;
yysize = yysize0;
break;
}
yyarg[yycount++] = yytname[yyx];
{
YYPTRDIFF_T yysize1
= yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
yysize = yysize1;
else
return 2;
}
}
}
}
switch (yycount)
{
# define YYCASE_(N, S) \
case N: \
yyformat = S; \
break
default:
YYCASE_(0, YY_("syntax error"));
YYCASE_(1, YY_("syntax error, unexpected %s"));
YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
# undef YYCASE_
}
{
YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1;
if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)
yysize = yysize1;
else
return 2;
}
if (*yymsg_alloc < yysize)
{
*yymsg_alloc = 2 * yysize;
if (! (yysize <= *yymsg_alloc
&& *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
*yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
return 1;
}
{
char *yyp = *yymsg;
int yyi = 0;
while ((*yyp = *yyformat) != '\0')
if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
yyp += yytnamerr (yyp, yyarg[yyi++]);
yyformat += 2;
}
else
{
++yyp;
++yyformat;
}
}
return 0;
}
#endif
static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, struct _mesa_glsl_parse_state *state)
{
YYUSE (yyvaluep);
YYUSE (yylocationp);
YYUSE (state);
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YYUSE (yytype);
YY_IGNORE_MAYBE_UNINITIALIZED_END
}
int
yyparse (struct _mesa_glsl_parse_state *state)
{
int yychar;
YY_INITIAL_VALUE (static YYSTYPE yyval_default;)
YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default);
static YYLTYPE yyloc_default
# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
= { 1, 1, 1, 1 }
# endif
;
YYLTYPE yylloc = yyloc_default;
int yynerrs;
yy_state_fast_t yystate;
int yyerrstatus;
yy_state_t yyssa[YYINITDEPTH];
yy_state_t *yyss;
yy_state_t *yyssp;
YYSTYPE yyvsa[YYINITDEPTH];
YYSTYPE *yyvs;
YYSTYPE *yyvsp;
YYLTYPE yylsa[YYINITDEPTH];
YYLTYPE *yyls;
YYLTYPE *yylsp;
YYLTYPE yyerror_range[3];
YYPTRDIFF_T yystacksize;
int yyn;
int yyresult;
int yytoken = 0;
YYSTYPE yyval;
YYLTYPE yyloc;
#if YYERROR_VERBOSE
char yymsgbuf[128];
char *yymsg = yymsgbuf;
YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf;
#endif
#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N))
int yylen = 0;
yyssp = yyss = yyssa;
yyvsp = yyvs = yyvsa;
yylsp = yyls = yylsa;
yystacksize = YYINITDEPTH;
YYDPRINTF ((stderr, "Starting parse\n"));
yystate = 0;
yyerrstatus = 0;
yynerrs = 0;
yychar = YYEMPTY;
#line 89 "src/compiler/glsl/glsl_parser.yy"
{
yylloc.first_line = 1;
yylloc.first_column = 1;
yylloc.last_line = 1;
yylloc.last_column = 1;
yylloc.source = 0;
yylloc.path = NULL;
}
#line 2339 "src/compiler/glsl/glsl_parser.cpp"
yylsp[0] = yylloc;
goto yysetstate;
yynewstate:
yyssp++;
yysetstate:
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
YY_IGNORE_USELESS_CAST_BEGIN
*yyssp = YY_CAST (yy_state_t, yystate);
YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
#if !defined yyoverflow && !defined YYSTACK_RELOCATE
goto yyexhaustedlab;
#else
{
YYPTRDIFF_T yysize = yyssp - yyss + 1;
# if defined yyoverflow
{
yy_state_t *yyss1 = yyss;
YYSTYPE *yyvs1 = yyvs;
YYLTYPE *yyls1 = yyls;
yyoverflow (YY_("memory exhausted"),
&yyss1, yysize * YYSIZEOF (*yyssp),
&yyvs1, yysize * YYSIZEOF (*yyvsp),
&yyls1, yysize * YYSIZEOF (*yylsp),
&yystacksize);
yyss = yyss1;
yyvs = yyvs1;
yyls = yyls1;
}
# else
if (YYMAXDEPTH <= yystacksize)
goto yyexhaustedlab;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
yystacksize = YYMAXDEPTH;
{
yy_state_t *yyss1 = yyss;
union yyalloc *yyptr =
YY_CAST (union yyalloc *,
YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
if (! yyptr)
goto yyexhaustedlab;
YYSTACK_RELOCATE (yyss_alloc, yyss);
YYSTACK_RELOCATE (yyvs_alloc, yyvs);
YYSTACK_RELOCATE (yyls_alloc, yyls);
# undef YYSTACK_RELOCATE
if (yyss1 != yyssa)
YYSTACK_FREE (yyss1);
}
# endif
yyssp = yyss + yysize - 1;
yyvsp = yyvs + yysize - 1;
yylsp = yyls + yysize - 1;
YY_IGNORE_USELESS_CAST_BEGIN
YYDPRINTF ((stderr, "Stack size increased to %ld\n",
YY_CAST (long, yystacksize)));
YY_IGNORE_USELESS_CAST_END
if (yyss + yystacksize - 1 <= yyssp)
YYABORT;
}
#endif
if (yystate == YYFINAL)
YYACCEPT;
goto yybackup;
yybackup:
yyn = yypact[yystate];
if (yypact_value_is_default (yyn))
goto yydefault;
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
yychar = yylex (&yylval, &yylloc, state);
}
if (yychar <= YYEOF)
{
yychar = yytoken = YYEOF;
YYDPRINTF ((stderr, "Now at end of input.\n"));
}
else
{
yytoken = YYTRANSLATE (yychar);
YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
}
yyn += yytoken;
if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
goto yydefault;
yyn = yytable[yyn];
if (yyn <= 0)
{
if (yytable_value_is_error (yyn))
goto yyerrlab;
yyn = -yyn;
goto yyreduce;
}
if (yyerrstatus)
yyerrstatus--;
YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
yystate = yyn;
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
*++yylsp = yylloc;
yychar = YYEMPTY;
goto yynewstate;
yydefault:
yyn = yydefact[yystate];
if (yyn == 0)
goto yyerrlab;
goto yyreduce;
yyreduce:
yylen = yyr2[yyn];
yyval = yyvsp[1-yylen];
YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen);
yyerror_range[1] = yyloc;
YY_REDUCE_PRINT (yyn);
switch (yyn)
{
case 2:
#line 295 "src/compiler/glsl/glsl_parser.yy"
{
_mesa_glsl_initialize_types(state);
}
#line 2540 "src/compiler/glsl/glsl_parser.cpp"
break;
case 3:
#line 299 "src/compiler/glsl/glsl_parser.yy"
{
delete state->symbols;
state->symbols = new(ralloc_parent(state)) glsl_symbol_table;
if (state->es_shader) {
if (state->stage == MESA_SHADER_FRAGMENT) {
state->symbols->add_default_precision_qualifier("int", ast_precision_medium);
} else {
state->symbols->add_default_precision_qualifier("float", ast_precision_high);
state->symbols->add_default_precision_qualifier("int", ast_precision_high);
}
state->symbols->add_default_precision_qualifier("sampler2D", ast_precision_low);
state->symbols->add_default_precision_qualifier("samplerExternalOES", ast_precision_low);
state->symbols->add_default_precision_qualifier("samplerCube", ast_precision_low);
state->symbols->add_default_precision_qualifier("atomic_uint", ast_precision_high);
}
_mesa_glsl_initialize_types(state);
}
#line 2562 "src/compiler/glsl/glsl_parser.cpp"
break;
case 5:
#line 321 "src/compiler/glsl/glsl_parser.yy"
{
state->process_version_directive(&(yylsp[-1]), (yyvsp[-1].n), NULL);
if (state->error) {
YYERROR;
}
}
#line 2573 "src/compiler/glsl/glsl_parser.cpp"
break;
case 6:
#line 328 "src/compiler/glsl/glsl_parser.yy"
{
state->process_version_directive(&(yylsp[-2]), (yyvsp[-2].n), (yyvsp[-1].identifier));
if (state->error) {
YYERROR;
}
}
#line 2584 "src/compiler/glsl/glsl_parser.cpp"
break;
case 7:
#line 337 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = NULL; }
#line 2590 "src/compiler/glsl/glsl_parser.cpp"
break;
case 8:
#line 338 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = NULL; }
#line 2596 "src/compiler/glsl/glsl_parser.cpp"
break;
case 9:
#line 339 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = NULL; }
#line 2602 "src/compiler/glsl/glsl_parser.cpp"
break;
case 10:
#line 340 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = NULL; }
#line 2608 "src/compiler/glsl/glsl_parser.cpp"
break;
case 11:
#line 342 "src/compiler/glsl/glsl_parser.yy"
{
if (state->is_version(120, 300) &&
state->stage == MESA_SHADER_FRAGMENT) {
_mesa_glsl_error(& (yylsp[-1]), state,
"pragma `invariant(all)' cannot be used "
"in a fragment shader.");
} else if (!state->is_version(120, 100)) {
_mesa_glsl_warning(& (yylsp[-1]), state,
"pragma `invariant(all)' not supported in %s "
"(GLSL ES 1.00 or GLSL 1.20 required)",
state->get_version_string());
} else {
state->all_invariant = true;
}
(yyval.node) = NULL;
}
#line 2636 "src/compiler/glsl/glsl_parser.cpp"
break;
case 12:
#line 366 "src/compiler/glsl/glsl_parser.yy"
{
void *mem_ctx = state->linalloc;
(yyval.node) = new(mem_ctx) ast_warnings_toggle(true);
}
#line 2645 "src/compiler/glsl/glsl_parser.cpp"
break;
case 13:
#line 371 "src/compiler/glsl/glsl_parser.yy"
{
void *mem_ctx = state->linalloc;
(yyval.node) = new(mem_ctx) ast_warnings_toggle(false);
}
#line 2654 "src/compiler/glsl/glsl_parser.cpp"
break;
case 19:
#line 390 "src/compiler/glsl/glsl_parser.yy"
{
if (!_mesa_glsl_process_extension((yyvsp[-3].identifier), & (yylsp[-3]), (yyvsp[-1].identifier), & (yylsp[-1]), state)) {
YYERROR;
}
}
#line 2664 "src/compiler/glsl/glsl_parser.cpp"
break;
case 20:
#line 399 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].node) != NULL)
state->translation_unit.push_tail(& (yyvsp[0].node)->link);
}
#line 2676 "src/compiler/glsl/glsl_parser.cpp"
break;
case 21:
#line 407 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].node) != NULL)
state->translation_unit.push_tail(& (yyvsp[0].node)->link);
}
#line 2688 "src/compiler/glsl/glsl_parser.cpp"
break;
case 22:
#line 414 "src/compiler/glsl/glsl_parser.yy"
{
if (!state->allow_extension_directive_midshader) {
_mesa_glsl_error(& (yylsp[0]), state,
"#extension directive is not allowed "
"in the middle of a shader");
YYERROR;
}
}
#line 2701 "src/compiler/glsl/glsl_parser.cpp"
break;
case 25:
#line 431 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.identifier = (yyvsp[0].identifier);
}
#line 2712 "src/compiler/glsl/glsl_parser.cpp"
break;
case 26:
#line 438 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.int_constant = (yyvsp[0].n);
}
#line 2723 "src/compiler/glsl/glsl_parser.cpp"
break;
case 27:
#line 445 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.uint_constant = (yyvsp[0].n);
}
#line 2734 "src/compiler/glsl/glsl_parser.cpp"
break;
case 28:
#line 452 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_int64_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.int64_constant = (yyvsp[0].n64);
}
#line 2745 "src/compiler/glsl/glsl_parser.cpp"
break;
case 29:
#line 459 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_uint64_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.uint64_constant = (yyvsp[0].n64);
}
#line 2756 "src/compiler/glsl/glsl_parser.cpp"
break;
case 30:
#line 466 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.float_constant = (yyvsp[0].real);
}
#line 2767 "src/compiler/glsl/glsl_parser.cpp"
break;
case 31:
#line 473 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_double_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.double_constant = (yyvsp[0].dreal);
}
#line 2778 "src/compiler/glsl/glsl_parser.cpp"
break;
case 32:
#line 480 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL);
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->primary_expression.bool_constant = (yyvsp[0].n);
}
#line 2789 "src/compiler/glsl/glsl_parser.cpp"
break;
case 33:
#line 487 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[-1].expression);
}
#line 2797 "src/compiler/glsl/glsl_parser.cpp"
break;
case 35:
#line 495 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[-3].expression), (yyvsp[-1].expression), NULL);
(yyval.expression)->set_location_range((yylsp[-3]), (yylsp[0]));
}
#line 2807 "src/compiler/glsl/glsl_parser.cpp"
break;
case 36:
#line 501 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[0].expression);
}
#line 2815 "src/compiler/glsl/glsl_parser.cpp"
break;
case 37:
#line 505 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[-2].expression), NULL, NULL);
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
(yyval.expression)->primary_expression.identifier = (yyvsp[0].identifier);
}
#line 2826 "src/compiler/glsl/glsl_parser.cpp"
break;
case 38:
#line 512 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[-1].expression), NULL, NULL);
(yyval.expression)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 2836 "src/compiler/glsl/glsl_parser.cpp"
break;
case 39:
#line 518 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[-1].expression), NULL, NULL);
(yyval.expression)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 2846 "src/compiler/glsl/glsl_parser.cpp"
break;
case 47:
#line 549 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[-1].expression);
(yyval.expression)->set_location((yylsp[-1]));
(yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link);
}
#line 2856 "src/compiler/glsl/glsl_parser.cpp"
break;
case 48:
#line 555 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[-2].expression);
(yyval.expression)->set_location((yylsp[-2]));
(yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link);
}
#line 2866 "src/compiler/glsl/glsl_parser.cpp"
break;
case 50:
#line 571 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_function_expression((yyvsp[0].type_specifier));
(yyval.expression)->set_location((yylsp[0]));
}
#line 2876 "src/compiler/glsl/glsl_parser.cpp"
break;
case 51:
#line 577 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_function_expression((yyvsp[0].expression));
(yyval.expression)->set_location((yylsp[0]));
}
#line 2886 "src/compiler/glsl/glsl_parser.cpp"
break;
case 53:
#line 592 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[0].expression), NULL, NULL);
(yyval.expression)->set_location((yylsp[-1]));
}
#line 2896 "src/compiler/glsl/glsl_parser.cpp"
break;
case 54:
#line 598 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[0].expression), NULL, NULL);
(yyval.expression)->set_location((yylsp[-1]));
}
#line 2906 "src/compiler/glsl/glsl_parser.cpp"
break;
case 55:
#line 604 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression((yyvsp[-1].n), (yyvsp[0].expression), NULL, NULL);
(yyval.expression)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 2916 "src/compiler/glsl/glsl_parser.cpp"
break;
case 56:
#line 613 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_plus; }
#line 2922 "src/compiler/glsl/glsl_parser.cpp"
break;
case 57:
#line 614 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_neg; }
#line 2928 "src/compiler/glsl/glsl_parser.cpp"
break;
case 58:
#line 615 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_logic_not; }
#line 2934 "src/compiler/glsl/glsl_parser.cpp"
break;
case 59:
#line 616 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_bit_not; }
#line 2940 "src/compiler/glsl/glsl_parser.cpp"
break;
case 61:
#line 622 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 2950 "src/compiler/glsl/glsl_parser.cpp"
break;
case 62:
#line 628 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 2960 "src/compiler/glsl/glsl_parser.cpp"
break;
case 63:
#line 634 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 2970 "src/compiler/glsl/glsl_parser.cpp"
break;
case 65:
#line 644 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 2980 "src/compiler/glsl/glsl_parser.cpp"
break;
case 66:
#line 650 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 2990 "src/compiler/glsl/glsl_parser.cpp"
break;
case 68:
#line 660 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3000 "src/compiler/glsl/glsl_parser.cpp"
break;
case 69:
#line 666 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3010 "src/compiler/glsl/glsl_parser.cpp"
break;
case 71:
#line 676 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3020 "src/compiler/glsl/glsl_parser.cpp"
break;
case 72:
#line 682 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3030 "src/compiler/glsl/glsl_parser.cpp"
break;
case 73:
#line 688 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3040 "src/compiler/glsl/glsl_parser.cpp"
break;
case 74:
#line 694 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3050 "src/compiler/glsl/glsl_parser.cpp"
break;
case 76:
#line 704 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3060 "src/compiler/glsl/glsl_parser.cpp"
break;
case 77:
#line 710 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3070 "src/compiler/glsl/glsl_parser.cpp"
break;
case 79:
#line 720 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_bit_and, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3080 "src/compiler/glsl/glsl_parser.cpp"
break;
case 81:
#line 730 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3090 "src/compiler/glsl/glsl_parser.cpp"
break;
case 83:
#line 740 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3100 "src/compiler/glsl/glsl_parser.cpp"
break;
case 85:
#line 750 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3110 "src/compiler/glsl/glsl_parser.cpp"
break;
case 87:
#line 760 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3120 "src/compiler/glsl/glsl_parser.cpp"
break;
case 89:
#line 770 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3130 "src/compiler/glsl/glsl_parser.cpp"
break;
case 91:
#line 780 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[-4].expression), (yyvsp[-2].expression), (yyvsp[0].expression));
(yyval.expression)->set_location_range((yylsp[-4]), (yylsp[0]));
}
#line 3140 "src/compiler/glsl/glsl_parser.cpp"
break;
case 93:
#line 790 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_expression((yyvsp[-1].n), (yyvsp[-2].expression), (yyvsp[0].expression), NULL);
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 3150 "src/compiler/glsl/glsl_parser.cpp"
break;
case 94:
#line 798 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_assign; }
#line 3156 "src/compiler/glsl/glsl_parser.cpp"
break;
case 95:
#line 799 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_mul_assign; }
#line 3162 "src/compiler/glsl/glsl_parser.cpp"
break;
case 96:
#line 800 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_div_assign; }
#line 3168 "src/compiler/glsl/glsl_parser.cpp"
break;
case 97:
#line 801 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_mod_assign; }
#line 3174 "src/compiler/glsl/glsl_parser.cpp"
break;
case 98:
#line 802 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_add_assign; }
#line 3180 "src/compiler/glsl/glsl_parser.cpp"
break;
case 99:
#line 803 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_sub_assign; }
#line 3186 "src/compiler/glsl/glsl_parser.cpp"
break;
case 100:
#line 804 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_ls_assign; }
#line 3192 "src/compiler/glsl/glsl_parser.cpp"
break;
case 101:
#line 805 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_rs_assign; }
#line 3198 "src/compiler/glsl/glsl_parser.cpp"
break;
case 102:
#line 806 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_and_assign; }
#line 3204 "src/compiler/glsl/glsl_parser.cpp"
break;
case 103:
#line 807 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_xor_assign; }
#line 3210 "src/compiler/glsl/glsl_parser.cpp"
break;
case 104:
#line 808 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.n) = ast_or_assign; }
#line 3216 "src/compiler/glsl/glsl_parser.cpp"
break;
case 105:
#line 813 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[0].expression);
}
#line 3224 "src/compiler/glsl/glsl_parser.cpp"
break;
case 106:
#line 817 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
if ((yyvsp[-2].expression)->oper != ast_sequence) {
(yyval.expression) = new(ctx) ast_expression(ast_sequence, NULL, NULL, NULL);
(yyval.expression)->set_location_range((yylsp[-2]), (yylsp[0]));
(yyval.expression)->expressions.push_tail(& (yyvsp[-2].expression)->link);
} else {
(yyval.expression) = (yyvsp[-2].expression);
}
(yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link);
}
#line 3241 "src/compiler/glsl/glsl_parser.cpp"
break;
case 108:
#line 837 "src/compiler/glsl/glsl_parser.yy"
{
state->symbols->pop_scope();
(yyval.node) = (yyvsp[-1].function);
}
#line 3250 "src/compiler/glsl/glsl_parser.cpp"
break;
case 109:
#line 842 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = (yyvsp[-1].declarator_list);
}
#line 3258 "src/compiler/glsl/glsl_parser.cpp"
break;
case 110:
#line 846 "src/compiler/glsl/glsl_parser.yy"
{
(yyvsp[-1].type_specifier)->default_precision = (yyvsp[-2].n);
(yyval.node) = (yyvsp[-1].type_specifier);
}
#line 3267 "src/compiler/glsl/glsl_parser.cpp"
break;
case 111:
#line 851 "src/compiler/glsl/glsl_parser.yy"
{
ast_interface_block *block = (ast_interface_block *) (yyvsp[0].node);
if (block->layout.has_layout() || block->layout.has_memory()) {
if (!block->default_layout.merge_qualifier(& (yylsp[0]), state, block->layout, false)) {
YYERROR;
}
}
block->layout = block->default_layout;
if (!block->layout.push_to_global(& (yylsp[0]), state)) {
YYERROR;
}
(yyval.node) = (yyvsp[0].node);
}
#line 3285 "src/compiler/glsl/glsl_parser.cpp"
break;
case 115:
#line 877 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.function) = (yyvsp[-1].function);
(yyval.function)->parameters.push_tail(& (yyvsp[0].parameter_declarator)->link);
}
#line 3294 "src/compiler/glsl/glsl_parser.cpp"
break;
case 116:
#line 882 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.function) = (yyvsp[-2].function);
(yyval.function)->parameters.push_tail(& (yyvsp[0].parameter_declarator)->link);
}
#line 3303 "src/compiler/glsl/glsl_parser.cpp"
break;
case 117:
#line 890 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.function) = new(ctx) ast_function();
(yyval.function)->set_location((yylsp[-1]));
(yyval.function)->return_type = (yyvsp[-2].fully_specified_type);
(yyval.function)->identifier = (yyvsp[-1].identifier);
if ((yyvsp[-2].fully_specified_type)->qualifier.is_subroutine_decl()) {
state->symbols->add_type((yyvsp[-1].identifier), glsl_type::get_subroutine_instance((yyvsp[-1].identifier)));
} else
state->symbols->add_function(new(state) ir_function((yyvsp[-1].identifier)));
state->symbols->push_scope();
}
#line 3322 "src/compiler/glsl/glsl_parser.cpp"
break;
case 118:
#line 908 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
(yyval.parameter_declarator)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type();
(yyval.parameter_declarator)->type->set_location((yylsp[-1]));
(yyval.parameter_declarator)->type->specifier = (yyvsp[-1].type_specifier);
(yyval.parameter_declarator)->identifier = (yyvsp[0].identifier);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto));
}
#line 3337 "src/compiler/glsl/glsl_parser.cpp"
break;
case 119:
#line 919 "src/compiler/glsl/glsl_parser.yy"
{
if (state->allow_layout_qualifier_on_function_parameter) {
void *ctx = state->linalloc;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
(yyval.parameter_declarator)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type();
(yyval.parameter_declarator)->type->set_location((yylsp[-1]));
(yyval.parameter_declarator)->type->specifier = (yyvsp[-1].type_specifier);
(yyval.parameter_declarator)->identifier = (yyvsp[0].identifier);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto));
} else {
_mesa_glsl_error(&(yylsp[-2]), state,
"is is not allowed on function parameter");
YYERROR;
}
}
#line 3358 "src/compiler/glsl/glsl_parser.cpp"
break;
case 120:
#line 936 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
(yyval.parameter_declarator)->set_location_range((yylsp[-2]), (yylsp[0]));
(yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type();
(yyval.parameter_declarator)->type->set_location((yylsp[-2]));
(yyval.parameter_declarator)->type->specifier = (yyvsp[-2].type_specifier);
(yyval.parameter_declarator)->identifier = (yyvsp[-1].identifier);
(yyval.parameter_declarator)->array_specifier = (yyvsp[0].array_specifier);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-1].identifier), ir_var_auto));
}
#line 3374 "src/compiler/glsl/glsl_parser.cpp"
break;
case 121:
#line 951 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.parameter_declarator) = (yyvsp[0].parameter_declarator);
(yyval.parameter_declarator)->type->qualifier = (yyvsp[-1].type_qualifier);
if (!(yyval.parameter_declarator)->type->qualifier.push_to_global(& (yylsp[-1]), state)) {
YYERROR;
}
}
#line 3386 "src/compiler/glsl/glsl_parser.cpp"
break;
case 122:
#line 959 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
(yyval.parameter_declarator)->set_location((yylsp[0]));
(yyval.parameter_declarator)->type = new(ctx) ast_fully_specified_type();
(yyval.parameter_declarator)->type->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.parameter_declarator)->type->qualifier = (yyvsp[-1].type_qualifier);
if (!(yyval.parameter_declarator)->type->qualifier.push_to_global(& (yylsp[-1]), state)) {
YYERROR;
}
(yyval.parameter_declarator)->type->specifier = (yyvsp[0].type_specifier);
}
#line 3403 "src/compiler/glsl/glsl_parser.cpp"
break;
case 123:
#line 975 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
}
#line 3411 "src/compiler/glsl/glsl_parser.cpp"
break;
case 124:
#line 979 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).flags.q.constant)
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate const qualifier");
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).flags.q.constant = 1;
}
#line 3423 "src/compiler/glsl/glsl_parser.cpp"
break;
case 125:
#line 987 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).flags.q.precise)
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate precise qualifier");
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).flags.q.precise = 1;
}
#line 3435 "src/compiler/glsl/glsl_parser.cpp"
break;
case 126:
#line 995 "src/compiler/glsl/glsl_parser.yy"
{
if (((yyvsp[-1].type_qualifier).flags.q.in || (yyvsp[-1].type_qualifier).flags.q.out) && ((yyvsp[0].type_qualifier).flags.q.in || (yyvsp[0].type_qualifier).flags.q.out))
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate in/out/inout qualifier");
if (!state->has_420pack_or_es31() && (yyvsp[0].type_qualifier).flags.q.constant)
_mesa_glsl_error(&(yylsp[-1]), state, "in/out/inout must come after const "
"or precise");
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 3451 "src/compiler/glsl/glsl_parser.cpp"
break;
case 127:
#line 1007 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).precision != ast_precision_none)
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate precision qualifier");
if (!state->has_420pack_or_es31() &&
(yyvsp[0].type_qualifier).flags.i != 0)
_mesa_glsl_error(&(yylsp[-1]), state, "precision qualifiers must come last");
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).precision = (yyvsp[-1].n);
}
#line 3467 "src/compiler/glsl/glsl_parser.cpp"
break;
case 128:
#line 1019 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 3476 "src/compiler/glsl/glsl_parser.cpp"
break;
case 129:
#line 1026 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
}
#line 3485 "src/compiler/glsl/glsl_parser.cpp"
break;
case 130:
#line 1031 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.out = 1;
}
#line 3494 "src/compiler/glsl/glsl_parser.cpp"
break;
case 131:
#line 1036 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
(yyval.type_qualifier).flags.q.out = 1;
}
#line 3504 "src/compiler/glsl/glsl_parser.cpp"
break;
case 134:
#line 1050 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
decl->set_location((yylsp[0]));
(yyval.declarator_list) = (yyvsp[-2].declarator_list);
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto));
}
#line 3518 "src/compiler/glsl/glsl_parser.cpp"
break;
case 135:
#line 1060 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-1].identifier), (yyvsp[0].array_specifier), NULL);
decl->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.declarator_list) = (yyvsp[-3].declarator_list);
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-1].identifier), ir_var_auto));
}
#line 3532 "src/compiler/glsl/glsl_parser.cpp"
break;
case 136:
#line 1070 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-3].identifier), (yyvsp[-2].array_specifier), (yyvsp[0].expression));
decl->set_location_range((yylsp[-3]), (yylsp[-2]));
(yyval.declarator_list) = (yyvsp[-5].declarator_list);
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-3].identifier), ir_var_auto));
}
#line 3546 "src/compiler/glsl/glsl_parser.cpp"
break;
case 137:
#line 1080 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-2].identifier), NULL, (yyvsp[0].expression));
decl->set_location((yylsp[-2]));
(yyval.declarator_list) = (yyvsp[-4].declarator_list);
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-2].identifier), ir_var_auto));
}
#line 3560 "src/compiler/glsl/glsl_parser.cpp"
break;
case 138:
#line 1094 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[0].fully_specified_type));
(yyval.declarator_list)->set_location((yylsp[0]));
}
#line 3571 "src/compiler/glsl/glsl_parser.cpp"
break;
case 139:
#line 1101 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
decl->set_location((yylsp[0]));
(yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-1].fully_specified_type));
(yyval.declarator_list)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[0].identifier), ir_var_auto));
}
#line 3586 "src/compiler/glsl/glsl_parser.cpp"
break;
case 140:
#line 1112 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-1].identifier), (yyvsp[0].array_specifier), NULL);
decl->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-2].fully_specified_type));
(yyval.declarator_list)->set_location_range((yylsp[-2]), (yylsp[0]));
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-1].identifier), ir_var_auto));
}
#line 3601 "src/compiler/glsl/glsl_parser.cpp"
break;
case 141:
#line 1123 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-3].identifier), (yyvsp[-2].array_specifier), (yyvsp[0].expression));
decl->set_location_range((yylsp[-3]), (yylsp[-2]));
(yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-4].fully_specified_type));
(yyval.declarator_list)->set_location_range((yylsp[-4]), (yylsp[-2]));
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-3].identifier), ir_var_auto));
}
#line 3616 "src/compiler/glsl/glsl_parser.cpp"
break;
case 142:
#line 1134 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-2].identifier), NULL, (yyvsp[0].expression));
decl->set_location((yylsp[-2]));
(yyval.declarator_list) = new(ctx) ast_declarator_list((yyvsp[-3].fully_specified_type));
(yyval.declarator_list)->set_location_range((yylsp[-3]), (yylsp[-2]));
(yyval.declarator_list)->declarations.push_tail(&decl->link);
state->symbols->add_variable(new(state) ir_variable(NULL, (yyvsp[-2].identifier), ir_var_auto));
}
#line 3631 "src/compiler/glsl/glsl_parser.cpp"
break;
case 143:
#line 1145 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
decl->set_location((yylsp[0]));
(yyval.declarator_list) = new(ctx) ast_declarator_list(NULL);
(yyval.declarator_list)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.declarator_list)->invariant = true;
(yyval.declarator_list)->declarations.push_tail(&decl->link);
}
#line 3647 "src/compiler/glsl/glsl_parser.cpp"
break;
case 144:
#line 1157 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
decl->set_location((yylsp[0]));
(yyval.declarator_list) = new(ctx) ast_declarator_list(NULL);
(yyval.declarator_list)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.declarator_list)->precise = true;
(yyval.declarator_list)->declarations.push_tail(&decl->link);
}
#line 3663 "src/compiler/glsl/glsl_parser.cpp"
break;
case 145:
#line 1172 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
(yyval.fully_specified_type)->set_location((yylsp[0]));
(yyval.fully_specified_type)->specifier = (yyvsp[0].type_specifier);
}
#line 3674 "src/compiler/glsl/glsl_parser.cpp"
break;
case 146:
#line 1179 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
(yyval.fully_specified_type)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.fully_specified_type)->qualifier = (yyvsp[-1].type_qualifier);
if (!(yyval.fully_specified_type)->qualifier.push_to_global(& (yylsp[-1]), state)) {
YYERROR;
}
(yyval.fully_specified_type)->specifier = (yyvsp[0].type_specifier);
if ((yyval.fully_specified_type)->specifier->structure != NULL &&
(yyval.fully_specified_type)->specifier->structure->is_declaration) {
(yyval.fully_specified_type)->specifier->structure->layout = &(yyval.fully_specified_type)->qualifier;
}
}
#line 3693 "src/compiler/glsl/glsl_parser.cpp"
break;
case 147:
#line 1197 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
}
#line 3701 "src/compiler/glsl/glsl_parser.cpp"
break;
case 149:
#line 1205 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-2].type_qualifier);
if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[0]), state, (yyvsp[0].type_qualifier), true)) {
YYERROR;
}
}
#line 3712 "src/compiler/glsl/glsl_parser.cpp"
break;
case 150:
#line 1215 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
if (!(yyval.type_qualifier).flags.i && (state->ARB_fragment_coord_conventions_enable ||
state->is_version(150, 0))) {
if (match_layout_qualifier((yyvsp[0].identifier), "origin_upper_left", state) == 0) {
(yyval.type_qualifier).flags.q.origin_upper_left = 1;
} else if (match_layout_qualifier((yyvsp[0].identifier), "pixel_center_integer",
state) == 0) {
(yyval.type_qualifier).flags.q.pixel_center_integer = 1;
}
if ((yyval.type_qualifier).flags.i && state->ARB_fragment_coord_conventions_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"GL_ARB_fragment_coord_conventions layout "
"identifier `%s' used", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i &&
(state->AMD_conservative_depth_enable ||
state->ARB_conservative_depth_enable ||
state->is_version(420, 0))) {
if (match_layout_qualifier((yyvsp[0].identifier), "depth_any", state) == 0) {
(yyval.type_qualifier).flags.q.depth_type = 1;
(yyval.type_qualifier).depth_type = ast_depth_any;
} else if (match_layout_qualifier((yyvsp[0].identifier), "depth_greater", state) == 0) {
(yyval.type_qualifier).flags.q.depth_type = 1;
(yyval.type_qualifier).depth_type = ast_depth_greater;
} else if (match_layout_qualifier((yyvsp[0].identifier), "depth_less", state) == 0) {
(yyval.type_qualifier).flags.q.depth_type = 1;
(yyval.type_qualifier).depth_type = ast_depth_less;
} else if (match_layout_qualifier((yyvsp[0].identifier), "depth_unchanged",
state) == 0) {
(yyval.type_qualifier).flags.q.depth_type = 1;
(yyval.type_qualifier).depth_type = ast_depth_unchanged;
}
if ((yyval.type_qualifier).flags.i && state->AMD_conservative_depth_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"GL_AMD_conservative_depth "
"layout qualifier `%s' is used", (yyvsp[0].identifier));
}
if ((yyval.type_qualifier).flags.i && state->ARB_conservative_depth_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"GL_ARB_conservative_depth "
"layout qualifier `%s' is used", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i && state->has_uniform_buffer_objects()) {
if (match_layout_qualifier((yyvsp[0].identifier), "std140", state) == 0) {
(yyval.type_qualifier).flags.q.std140 = 1;
} else if (match_layout_qualifier((yyvsp[0].identifier), "shared", state) == 0) {
(yyval.type_qualifier).flags.q.shared = 1;
} else if (match_layout_qualifier((yyvsp[0].identifier), "std430", state) == 0) {
(yyval.type_qualifier).flags.q.std430 = 1;
} else if (match_layout_qualifier((yyvsp[0].identifier), "column_major", state) == 0) {
(yyval.type_qualifier).flags.q.column_major = 1;
} else if (match_layout_qualifier((yyvsp[0].identifier), "row_major", state) == 0) {
(yyval.type_qualifier).flags.q.row_major = 1;
} else if (match_layout_qualifier((yyvsp[0].identifier), "packed", state) == 0) {
(yyval.type_qualifier).flags.q.packed = 1;
}
if ((yyval.type_qualifier).flags.i && state->ARB_uniform_buffer_object_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"#version 140 / GL_ARB_uniform_buffer_object "
"layout qualifier `%s' is used", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i) {
static const struct {
const char *s;
GLenum e;
} map[] = {
{ "points", GL_POINTS },
{ "lines", GL_LINES },
{ "lines_adjacency", GL_LINES_ADJACENCY },
{ "line_strip", GL_LINE_STRIP },
{ "triangles", GL_TRIANGLES },
{ "triangles_adjacency", GL_TRIANGLES_ADJACENCY },
{ "triangle_strip", GL_TRIANGLE_STRIP },
};
for (unsigned i = 0; i < ARRAY_SIZE(map); i++) {
if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) {
(yyval.type_qualifier).flags.q.prim_type = 1;
(yyval.type_qualifier).prim_type = map[i].e;
break;
}
}
if ((yyval.type_qualifier).flags.i && !state->has_geometry_shader() &&
!state->has_tessellation_shader()) {
_mesa_glsl_error(& (yylsp[0]), state, "#version 150 layout "
"qualifier `%s' used", (yyvsp[0].identifier));
}
}
if (state->has_shader_image_load_store()) {
if (!(yyval.type_qualifier).flags.i) {
static const struct {
const char *name;
enum pipe_format format;
glsl_base_type base_type;
unsigned required_glsl;
unsigned required_essl;
bool nv_image_formats;
bool ext_qualifiers;
} map[] = {
{ "rgba32f", PIPE_FORMAT_R32G32B32A32_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false },
{ "rgba16f", PIPE_FORMAT_R16G16B16A16_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false },
{ "rg32f", PIPE_FORMAT_R32G32_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rg16f", PIPE_FORMAT_R16G16_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "r11f_g11f_b10f", PIPE_FORMAT_R11G11B10_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "r32f", PIPE_FORMAT_R32_FLOAT, GLSL_TYPE_FLOAT, 130, 310, false, false },
{ "r16f", PIPE_FORMAT_R16_FLOAT, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rgba32ui", PIPE_FORMAT_R32G32B32A32_UINT, GLSL_TYPE_UINT, 130, 310, false, false },
{ "rgba16ui", PIPE_FORMAT_R16G16B16A16_UINT, GLSL_TYPE_UINT, 130, 310, false, false },
{ "rgb10_a2ui", PIPE_FORMAT_R10G10B10A2_UINT, GLSL_TYPE_UINT, 130, 0, true, false },
{ "rgba8ui", PIPE_FORMAT_R8G8B8A8_UINT, GLSL_TYPE_UINT, 130, 310, false, false },
{ "rg32ui", PIPE_FORMAT_R32G32_UINT, GLSL_TYPE_UINT, 130, 0, true, false },
{ "rg16ui", PIPE_FORMAT_R16G16_UINT, GLSL_TYPE_UINT, 130, 0, true, false },
{ "rg8ui", PIPE_FORMAT_R8G8_UINT, GLSL_TYPE_UINT, 130, 0, true, false },
{ "r32ui", PIPE_FORMAT_R32_UINT, GLSL_TYPE_UINT, 130, 310, false, false },
{ "r16ui", PIPE_FORMAT_R16_UINT, GLSL_TYPE_UINT, 130, 0, true, false },
{ "r8ui", PIPE_FORMAT_R8_UINT, GLSL_TYPE_UINT, 130, 0, true, false },
{ "rgba32i", PIPE_FORMAT_R32G32B32A32_SINT, GLSL_TYPE_INT, 130, 310, false, false },
{ "rgba16i", PIPE_FORMAT_R16G16B16A16_SINT, GLSL_TYPE_INT, 130, 310, false, false },
{ "rgba8i", PIPE_FORMAT_R8G8B8A8_SINT, GLSL_TYPE_INT, 130, 310, false, false },
{ "rg32i", PIPE_FORMAT_R32G32_SINT, GLSL_TYPE_INT, 130, 0, true, false },
{ "rg16i", PIPE_FORMAT_R16G16_SINT, GLSL_TYPE_INT, 130, 0, true, false },
{ "rg8i", PIPE_FORMAT_R8G8_SINT, GLSL_TYPE_INT, 130, 0, true, false },
{ "r32i", PIPE_FORMAT_R32_SINT, GLSL_TYPE_INT, 130, 310, false, false },
{ "r16i", PIPE_FORMAT_R16_SINT, GLSL_TYPE_INT, 130, 0, true, false },
{ "r8i", PIPE_FORMAT_R8_SINT, GLSL_TYPE_INT, 130, 0, true, false },
{ "rgba16", PIPE_FORMAT_R16G16B16A16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rgb10_a2", PIPE_FORMAT_R10G10B10A2_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rgba8", PIPE_FORMAT_R8G8B8A8_UNORM, GLSL_TYPE_FLOAT, 130, 310, false, false },
{ "rg16", PIPE_FORMAT_R16G16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rg8", PIPE_FORMAT_R8G8_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "r16", PIPE_FORMAT_R16_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "r8", PIPE_FORMAT_R8_UNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rgba16_snorm", PIPE_FORMAT_R16G16B16A16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rgba8_snorm", PIPE_FORMAT_R8G8B8A8_SNORM, GLSL_TYPE_FLOAT, 130, 310, false, false },
{ "rg16_snorm", PIPE_FORMAT_R16G16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "rg8_snorm", PIPE_FORMAT_R8G8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "r16_snorm", PIPE_FORMAT_R16_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "r8_snorm", PIPE_FORMAT_R8_SNORM, GLSL_TYPE_FLOAT, 130, 0, true, false },
{ "size1x8", PIPE_FORMAT_R8_SINT, GLSL_TYPE_VOID, 130, 0, false, true },
{ "size1x16", PIPE_FORMAT_R16_SINT, GLSL_TYPE_VOID, 130, 0, false, true },
{ "size1x32", PIPE_FORMAT_R32_SINT, GLSL_TYPE_VOID, 130, 0, false, true },
{ "size2x32", PIPE_FORMAT_R32G32_SINT, GLSL_TYPE_VOID, 130, 0, false, true },
{ "size4x32", PIPE_FORMAT_R32G32B32A32_SINT, GLSL_TYPE_VOID, 130, 0, false, true },
};
for (unsigned i = 0; i < ARRAY_SIZE(map); i++) {
if ((state->is_version(map[i].required_glsl,
map[i].required_essl) ||
(state->NV_image_formats_enable &&
map[i].nv_image_formats)) &&
match_layout_qualifier((yyvsp[0].identifier), map[i].name, state) == 0) {
if (!map[i].ext_qualifiers && !(state->ARB_shader_image_load_store_enable ||
state->is_version(420, 310))) {
continue;
}
if (map[i].ext_qualifiers && !state->EXT_shader_image_load_store_enable) {
continue;
}
(yyval.type_qualifier).flags.q.explicit_image_format = 1;
(yyval.type_qualifier).image_format = map[i].format;
(yyval.type_qualifier).image_base_type = map[i].base_type;
break;
}
}
}
}
if (!(yyval.type_qualifier).flags.i) {
if (match_layout_qualifier((yyvsp[0].identifier), "early_fragment_tests", state) == 0) {
if (state->stage != MESA_SHADER_FRAGMENT) {
_mesa_glsl_error(& (yylsp[0]), state,
"early_fragment_tests layout qualifier only "
"valid in fragment shaders");
}
(yyval.type_qualifier).flags.q.early_fragment_tests = 1;
}
if (match_layout_qualifier((yyvsp[0].identifier), "inner_coverage", state) == 0) {
if (state->stage != MESA_SHADER_FRAGMENT) {
_mesa_glsl_error(& (yylsp[0]), state,
"inner_coverage layout qualifier only "
"valid in fragment shaders");
}
if (state->INTEL_conservative_rasterization_enable) {
(yyval.type_qualifier).flags.q.inner_coverage = 1;
} else {
_mesa_glsl_error(& (yylsp[0]), state,
"inner_coverage layout qualifier present, "
"but the INTEL_conservative_rasterization extension "
"is not enabled.");
}
}
if (match_layout_qualifier((yyvsp[0].identifier), "post_depth_coverage", state) == 0) {
if (state->stage != MESA_SHADER_FRAGMENT) {
_mesa_glsl_error(& (yylsp[0]), state,
"post_depth_coverage layout qualifier only "
"valid in fragment shaders");
}
if (state->ARB_post_depth_coverage_enable ||
state->INTEL_conservative_rasterization_enable) {
(yyval.type_qualifier).flags.q.post_depth_coverage = 1;
} else {
_mesa_glsl_error(& (yylsp[0]), state,
"post_depth_coverage layout qualifier present, "
"but the GL_ARB_post_depth_coverage extension "
"is not enabled.");
}
}
if ((yyval.type_qualifier).flags.q.post_depth_coverage && (yyval.type_qualifier).flags.q.inner_coverage) {
_mesa_glsl_error(& (yylsp[0]), state,
"post_depth_coverage & inner_coverage layout qualifiers "
"are mutually exclusive");
}
}
const bool pixel_interlock_ordered = match_layout_qualifier((yyvsp[0].identifier),
"pixel_interlock_ordered", state) == 0;
const bool pixel_interlock_unordered = match_layout_qualifier((yyvsp[0].identifier),
"pixel_interlock_unordered", state) == 0;
const bool sample_interlock_ordered = match_layout_qualifier((yyvsp[0].identifier),
"sample_interlock_ordered", state) == 0;
const bool sample_interlock_unordered = match_layout_qualifier((yyvsp[0].identifier),
"sample_interlock_unordered", state) == 0;
if (pixel_interlock_ordered + pixel_interlock_unordered +
sample_interlock_ordered + sample_interlock_unordered > 0 &&
state->stage != MESA_SHADER_FRAGMENT) {
_mesa_glsl_error(& (yylsp[0]), state, "interlock layout qualifiers: "
"pixel_interlock_ordered, pixel_interlock_unordered, "
"sample_interlock_ordered and sample_interlock_unordered, "
"only valid in fragment shader input layout declaration.");
} else if (pixel_interlock_ordered + pixel_interlock_unordered +
sample_interlock_ordered + sample_interlock_unordered > 0 &&
!state->ARB_fragment_shader_interlock_enable &&
!state->NV_fragment_shader_interlock_enable) {
_mesa_glsl_error(& (yylsp[0]), state,
"interlock layout qualifier present, but the "
"GL_ARB_fragment_shader_interlock or "
"GL_NV_fragment_shader_interlock extension is not "
"enabled.");
} else {
(yyval.type_qualifier).flags.q.pixel_interlock_ordered = pixel_interlock_ordered;
(yyval.type_qualifier).flags.q.pixel_interlock_unordered = pixel_interlock_unordered;
(yyval.type_qualifier).flags.q.sample_interlock_ordered = sample_interlock_ordered;
(yyval.type_qualifier).flags.q.sample_interlock_unordered = sample_interlock_unordered;
}
if (!(yyval.type_qualifier).flags.i) {
static const struct {
const char *s;
GLenum e;
} map[] = {
{ "quads", GL_QUADS },
{ "isolines", GL_ISOLINES },
};
for (unsigned i = 0; i < ARRAY_SIZE(map); i++) {
if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) {
(yyval.type_qualifier).flags.q.prim_type = 1;
(yyval.type_qualifier).prim_type = map[i].e;
break;
}
}
if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"primitive mode qualifier `%s' requires "
"GLSL 4.00 or ARB_tessellation_shader", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i) {
static const struct {
const char *s;
enum gl_tess_spacing e;
} map[] = {
{ "equal_spacing", TESS_SPACING_EQUAL },
{ "fractional_odd_spacing", TESS_SPACING_FRACTIONAL_ODD },
{ "fractional_even_spacing", TESS_SPACING_FRACTIONAL_EVEN },
};
for (unsigned i = 0; i < ARRAY_SIZE(map); i++) {
if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) {
(yyval.type_qualifier).flags.q.vertex_spacing = 1;
(yyval.type_qualifier).vertex_spacing = map[i].e;
break;
}
}
if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"vertex spacing qualifier `%s' requires "
"GLSL 4.00 or ARB_tessellation_shader", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i) {
if (match_layout_qualifier((yyvsp[0].identifier), "cw", state) == 0) {
(yyval.type_qualifier).flags.q.ordering = 1;
(yyval.type_qualifier).ordering = GL_CW;
} else if (match_layout_qualifier((yyvsp[0].identifier), "ccw", state) == 0) {
(yyval.type_qualifier).flags.q.ordering = 1;
(yyval.type_qualifier).ordering = GL_CCW;
}
if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"ordering qualifier `%s' requires "
"GLSL 4.00 or ARB_tessellation_shader", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i) {
if (match_layout_qualifier((yyvsp[0].identifier), "point_mode", state) == 0) {
(yyval.type_qualifier).flags.q.point_mode = 1;
(yyval.type_qualifier).point_mode = true;
}
if ((yyval.type_qualifier).flags.i && !state->has_tessellation_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"qualifier `point_mode' requires "
"GLSL 4.00 or ARB_tessellation_shader");
}
}
if (!(yyval.type_qualifier).flags.i) {
static const struct {
const char *s;
uint32_t mask;
} map[] = {
{ "blend_support_multiply", BLEND_MULTIPLY },
{ "blend_support_screen", BLEND_SCREEN },
{ "blend_support_overlay", BLEND_OVERLAY },
{ "blend_support_darken", BLEND_DARKEN },
{ "blend_support_lighten", BLEND_LIGHTEN },
{ "blend_support_colordodge", BLEND_COLORDODGE },
{ "blend_support_colorburn", BLEND_COLORBURN },
{ "blend_support_hardlight", BLEND_HARDLIGHT },
{ "blend_support_softlight", BLEND_SOFTLIGHT },
{ "blend_support_difference", BLEND_DIFFERENCE },
{ "blend_support_exclusion", BLEND_EXCLUSION },
{ "blend_support_hsl_hue", BLEND_HSL_HUE },
{ "blend_support_hsl_saturation", BLEND_HSL_SATURATION },
{ "blend_support_hsl_color", BLEND_HSL_COLOR },
{ "blend_support_hsl_luminosity", BLEND_HSL_LUMINOSITY },
{ "blend_support_all_equations", BLEND_ALL },
};
for (unsigned i = 0; i < ARRAY_SIZE(map); i++) {
if (match_layout_qualifier((yyvsp[0].identifier), map[i].s, state) == 0) {
(yyval.type_qualifier).flags.q.blend_support = 1;
state->fs_blend_support |= map[i].mask;
break;
}
}
if ((yyval.type_qualifier).flags.i &&
!state->KHR_blend_equation_advanced_enable &&
!state->is_version(0, 320)) {
_mesa_glsl_error(& (yylsp[0]), state,
"advanced blending layout qualifiers require "
"ESSL 3.20 or KHR_blend_equation_advanced");
}
if ((yyval.type_qualifier).flags.i && state->stage != MESA_SHADER_FRAGMENT) {
_mesa_glsl_error(& (yylsp[0]), state,
"advanced blending layout qualifiers only "
"valid in fragment shaders");
}
}
if (!(yyval.type_qualifier).flags.i) {
if (match_layout_qualifier((yyvsp[0].identifier), "local_size_variable", state) == 0) {
(yyval.type_qualifier).flags.q.local_size_variable = 1;
}
if ((yyval.type_qualifier).flags.i && !state->ARB_compute_variable_group_size_enable) {
_mesa_glsl_error(& (yylsp[0]), state,
"qualifier `local_size_variable` requires "
"ARB_compute_variable_group_size");
}
}
if (!(yyval.type_qualifier).flags.i) {
if (match_layout_qualifier((yyvsp[0].identifier), "bindless_sampler", state) == 0)
(yyval.type_qualifier).flags.q.bindless_sampler = 1;
if (match_layout_qualifier((yyvsp[0].identifier), "bound_sampler", state) == 0)
(yyval.type_qualifier).flags.q.bound_sampler = 1;
if (state->has_shader_image_load_store()) {
if (match_layout_qualifier((yyvsp[0].identifier), "bindless_image", state) == 0)
(yyval.type_qualifier).flags.q.bindless_image = 1;
if (match_layout_qualifier((yyvsp[0].identifier), "bound_image", state) == 0)
(yyval.type_qualifier).flags.q.bound_image = 1;
}
if ((yyval.type_qualifier).flags.i && !state->has_bindless()) {
_mesa_glsl_error(& (yylsp[0]), state,
"qualifier `%s` requires "
"ARB_bindless_texture", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i &&
state->EXT_shader_framebuffer_fetch_non_coherent_enable) {
if (match_layout_qualifier((yyvsp[0].identifier), "noncoherent", state) == 0)
(yyval.type_qualifier).flags.q.non_coherent = 1;
}
if (!(yyval.type_qualifier).flags.i) {
if (match_layout_qualifier((yyvsp[0].identifier), "derivative_group_quadsNV", state) == 0) {
(yyval.type_qualifier).flags.q.derivative_group = 1;
(yyval.type_qualifier).derivative_group = DERIVATIVE_GROUP_QUADS;
} else if (match_layout_qualifier((yyvsp[0].identifier), "derivative_group_linearNV", state) == 0) {
(yyval.type_qualifier).flags.q.derivative_group = 1;
(yyval.type_qualifier).derivative_group = DERIVATIVE_GROUP_LINEAR;
}
if ((yyval.type_qualifier).flags.i) {
if (!state->has_compute_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"qualifier `%s' requires "
"a compute shader", (yyvsp[0].identifier));
}
if (!state->NV_compute_shader_derivatives_enable) {
_mesa_glsl_error(& (yylsp[0]), state,
"qualifier `%s' requires "
"NV_compute_shader_derivatives", (yyvsp[0].identifier));
}
if (state->NV_compute_shader_derivatives_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"NV_compute_shader_derivatives layout "
"qualifier `%s' used", (yyvsp[0].identifier));
}
}
}
if (!(yyval.type_qualifier).flags.i && state->stage != MESA_SHADER_FRAGMENT) {
if (match_layout_qualifier((yyvsp[0].identifier), "viewport_relative", state) == 0) {
(yyval.type_qualifier).flags.q.viewport_relative = 1;
}
if ((yyval.type_qualifier).flags.i && !state->NV_viewport_array2_enable) {
_mesa_glsl_error(& (yylsp[0]), state,
"qualifier `%s' requires "
"GL_NV_viewport_array2", (yyvsp[0].identifier));
}
if ((yyval.type_qualifier).flags.i && state->NV_viewport_array2_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"GL_NV_viewport_array2 layout "
"identifier `%s' used", (yyvsp[0].identifier));
}
}
if (!(yyval.type_qualifier).flags.i) {
_mesa_glsl_error(& (yylsp[0]), state, "unrecognized layout identifier "
"`%s'", (yyvsp[0].identifier));
YYERROR;
}
}
#line 4239 "src/compiler/glsl/glsl_parser.cpp"
break;
case 151:
#line 1738 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
void *ctx = state->linalloc;
if ((yyvsp[0].expression)->oper != ast_int_constant &&
(yyvsp[0].expression)->oper != ast_uint_constant &&
!state->has_enhanced_layouts()) {
_mesa_glsl_error(& (yylsp[-2]), state,
"compile-time constant expressions require "
"GLSL 4.40 or ARB_enhanced_layouts");
}
if (match_layout_qualifier("align", (yyvsp[-2].identifier), state) == 0) {
if (!state->has_enhanced_layouts()) {
_mesa_glsl_error(& (yylsp[-2]), state,
"align qualifier requires "
"GLSL 4.40 or ARB_enhanced_layouts");
} else {
(yyval.type_qualifier).flags.q.explicit_align = 1;
(yyval.type_qualifier).align = (yyvsp[0].expression);
}
}
if (match_layout_qualifier("location", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.explicit_location = 1;
if ((yyval.type_qualifier).flags.q.attribute == 1 &&
state->ARB_explicit_attrib_location_warn) {
_mesa_glsl_warning(& (yylsp[-2]), state,
"GL_ARB_explicit_attrib_location layout "
"identifier `%s' used", (yyvsp[-2].identifier));
}
(yyval.type_qualifier).location = (yyvsp[0].expression);
}
if (match_layout_qualifier("component", (yyvsp[-2].identifier), state) == 0) {
if (!state->has_enhanced_layouts()) {
_mesa_glsl_error(& (yylsp[-2]), state,
"component qualifier requires "
"GLSL 4.40 or ARB_enhanced_layouts");
} else {
(yyval.type_qualifier).flags.q.explicit_component = 1;
(yyval.type_qualifier).component = (yyvsp[0].expression);
}
}
if (match_layout_qualifier("index", (yyvsp[-2].identifier), state) == 0) {
if (state->es_shader && !state->EXT_blend_func_extended_enable) {
_mesa_glsl_error(& (yylsp[0]), state, "index layout qualifier requires EXT_blend_func_extended");
YYERROR;
}
(yyval.type_qualifier).flags.q.explicit_index = 1;
(yyval.type_qualifier).index = (yyvsp[0].expression);
}
if ((state->has_420pack_or_es31() ||
state->has_atomic_counters() ||
state->has_shader_storage_buffer_objects()) &&
match_layout_qualifier("binding", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.explicit_binding = 1;
(yyval.type_qualifier).binding = (yyvsp[0].expression);
}
if ((state->has_atomic_counters() ||
state->has_enhanced_layouts()) &&
match_layout_qualifier("offset", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.explicit_offset = 1;
(yyval.type_qualifier).offset = (yyvsp[0].expression);
}
if (match_layout_qualifier("max_vertices", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.max_vertices = 1;
(yyval.type_qualifier).max_vertices = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression));
if (!state->has_geometry_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"#version 150 max_vertices qualifier "
"specified", (yyvsp[0].expression));
}
}
if (state->stage == MESA_SHADER_GEOMETRY) {
if (match_layout_qualifier("stream", (yyvsp[-2].identifier), state) == 0 &&
state->check_explicit_attrib_stream_allowed(& (yylsp[0]))) {
(yyval.type_qualifier).flags.q.stream = 1;
(yyval.type_qualifier).flags.q.explicit_stream = 1;
(yyval.type_qualifier).stream = (yyvsp[0].expression);
}
}
if (state->has_enhanced_layouts()) {
if (match_layout_qualifier("xfb_buffer", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.xfb_buffer = 1;
(yyval.type_qualifier).flags.q.explicit_xfb_buffer = 1;
(yyval.type_qualifier).xfb_buffer = (yyvsp[0].expression);
}
if (match_layout_qualifier("xfb_offset", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.explicit_xfb_offset = 1;
(yyval.type_qualifier).offset = (yyvsp[0].expression);
}
if (match_layout_qualifier("xfb_stride", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.xfb_stride = 1;
(yyval.type_qualifier).flags.q.explicit_xfb_stride = 1;
(yyval.type_qualifier).xfb_stride = (yyvsp[0].expression);
}
}
static const char * const local_size_qualifiers[3] = {
"local_size_x",
"local_size_y",
"local_size_z",
};
for (int i = 0; i < 3; i++) {
if (match_layout_qualifier(local_size_qualifiers[i], (yyvsp[-2].identifier),
state) == 0) {
if (!state->has_compute_shader()) {
_mesa_glsl_error(& (yylsp[0]), state,
"%s qualifier requires GLSL 4.30 or "
"GLSL ES 3.10 or ARB_compute_shader",
local_size_qualifiers[i]);
YYERROR;
} else {
(yyval.type_qualifier).flags.q.local_size |= (1 << i);
(yyval.type_qualifier).local_size[i] = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression));
}
break;
}
}
if (match_layout_qualifier("invocations", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.invocations = 1;
(yyval.type_qualifier).invocations = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression));
if (!state->is_version(400, 320) &&
!state->ARB_gpu_shader5_enable &&
!state->OES_geometry_shader_enable &&
!state->EXT_geometry_shader_enable) {
_mesa_glsl_error(& (yylsp[0]), state,
"GL_ARB_gpu_shader5 invocations "
"qualifier specified", (yyvsp[0].expression));
}
}
if (match_layout_qualifier("vertices", (yyvsp[-2].identifier), state) == 0) {
(yyval.type_qualifier).flags.q.vertices = 1;
(yyval.type_qualifier).vertices = new(ctx) ast_layout_expression((yylsp[-2]), (yyvsp[0].expression));
if (!state->has_tessellation_shader()) {
_mesa_glsl_error(& (yylsp[-2]), state,
"vertices qualifier requires GLSL 4.00 or "
"ARB_tessellation_shader");
}
}
if (!(yyval.type_qualifier).flags.i) {
_mesa_glsl_error(& (yylsp[-2]), state, "unrecognized layout identifier "
"`%s'", (yyvsp[-2].identifier));
YYERROR;
}
}
#line 4408 "src/compiler/glsl/glsl_parser.cpp"
break;
case 152:
#line 1903 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
if ((yyval.type_qualifier).flags.q.uniform && !state->has_uniform_buffer_objects()) {
_mesa_glsl_error(& (yylsp[0]), state,
"#version 140 / GL_ARB_uniform_buffer_object "
"layout qualifier `%s' is used", (yyvsp[0].type_qualifier));
} else if ((yyval.type_qualifier).flags.q.uniform && state->ARB_uniform_buffer_object_warn) {
_mesa_glsl_warning(& (yylsp[0]), state,
"#version 140 / GL_ARB_uniform_buffer_object "
"layout qualifier `%s' is used", (yyvsp[0].type_qualifier));
}
}
#line 4426 "src/compiler/glsl/glsl_parser.cpp"
break;
case 153:
#line 1929 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.row_major = 1;
}
#line 4435 "src/compiler/glsl/glsl_parser.cpp"
break;
case 154:
#line 1934 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.packed = 1;
}
#line 4444 "src/compiler/glsl/glsl_parser.cpp"
break;
case 155:
#line 1939 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.shared = 1;
}
#line 4453 "src/compiler/glsl/glsl_parser.cpp"
break;
case 156:
#line 1947 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.subroutine = 1;
}
#line 4462 "src/compiler/glsl/glsl_parser.cpp"
break;
case 157:
#line 1952 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.subroutine = 1;
(yyval.type_qualifier).subroutine_list = (yyvsp[-1].subroutine_list);
}
#line 4472 "src/compiler/glsl/glsl_parser.cpp"
break;
case 158:
#line 1961 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
decl->set_location((yylsp[0]));
(yyval.subroutine_list) = new(ctx) ast_subroutine_list();
(yyval.subroutine_list)->declarations.push_tail(&decl->link);
}
#line 4485 "src/compiler/glsl/glsl_parser.cpp"
break;
case 159:
#line 1970 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
decl->set_location((yylsp[0]));
(yyval.subroutine_list) = (yyvsp[-2].subroutine_list);
(yyval.subroutine_list)->declarations.push_tail(&decl->link);
}
#line 4498 "src/compiler/glsl/glsl_parser.cpp"
break;
case 160:
#line 1982 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.smooth = 1;
}
#line 4507 "src/compiler/glsl/glsl_parser.cpp"
break;
case 161:
#line 1987 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.flat = 1;
}
#line 4516 "src/compiler/glsl/glsl_parser.cpp"
break;
case 162:
#line 1992 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.noperspective = 1;
}
#line 4525 "src/compiler/glsl/glsl_parser.cpp"
break;
case 163:
#line 2001 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.invariant = 1;
}
#line 4534 "src/compiler/glsl/glsl_parser.cpp"
break;
case 164:
#line 2006 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.precise = 1;
}
#line 4543 "src/compiler/glsl/glsl_parser.cpp"
break;
case 171:
#line 2017 "src/compiler/glsl/glsl_parser.yy"
{
memset(&(yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).precision = (yyvsp[0].n);
}
#line 4552 "src/compiler/glsl/glsl_parser.cpp"
break;
case 172:
#line 2035 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).flags.q.precise)
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate \"precise\" qualifier");
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).flags.q.precise = 1;
}
#line 4564 "src/compiler/glsl/glsl_parser.cpp"
break;
case 173:
#line 2043 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).flags.q.invariant)
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate \"invariant\" qualifier");
if (!state->has_420pack_or_es31() && (yyvsp[0].type_qualifier).flags.q.precise)
_mesa_glsl_error(&(yylsp[-1]), state,
"\"invariant\" must come after \"precise\"");
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).flags.q.invariant = 1;
if (state->is_version(430, 300) && (yyval.type_qualifier).flags.q.in)
_mesa_glsl_error(&(yylsp[-1]), state, "invariant qualifiers cannot be used with shader inputs");
}
#line 4593 "src/compiler/glsl/glsl_parser.cpp"
break;
case 174:
#line 2068 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).has_interpolation())
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate interpolation qualifier");
if (!state->has_420pack_or_es31() &&
((yyvsp[0].type_qualifier).flags.q.precise || (yyvsp[0].type_qualifier).flags.q.invariant)) {
_mesa_glsl_error(&(yylsp[-1]), state, "interpolation qualifiers must come "
"after \"precise\" or \"invariant\"");
}
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 4621 "src/compiler/glsl/glsl_parser.cpp"
break;
case 175:
#line 2092 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, (yyvsp[0].type_qualifier).has_layout());
}
#line 4639 "src/compiler/glsl/glsl_parser.cpp"
break;
case 176:
#line 2106 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 4648 "src/compiler/glsl/glsl_parser.cpp"
break;
case 177:
#line 2111 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).has_auxiliary_storage()) {
_mesa_glsl_error(&(yylsp[-1]), state,
"duplicate auxiliary storage qualifier (centroid or sample)");
}
if ((!state->has_420pack_or_es31() && !state->EXT_gpu_shader4_enable) &&
((yyvsp[0].type_qualifier).flags.q.precise || (yyvsp[0].type_qualifier).flags.q.invariant ||
(yyvsp[0].type_qualifier).has_interpolation() || (yyvsp[0].type_qualifier).has_layout())) {
_mesa_glsl_error(&(yylsp[-1]), state, "auxiliary storage qualifiers must come "
"just before storage qualifiers");
}
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 4668 "src/compiler/glsl/glsl_parser.cpp"
break;
case 178:
#line 2127 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).has_storage() &&
(!state->EXT_gpu_shader4_enable ||
state->stage != MESA_SHADER_FRAGMENT ||
!(yyvsp[-1].type_qualifier).flags.q.varying || !(yyvsp[0].type_qualifier).flags.q.out))
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate storage qualifier");
if (!state->has_420pack_or_es31() &&
((yyvsp[0].type_qualifier).flags.q.precise || (yyvsp[0].type_qualifier).flags.q.invariant || (yyvsp[0].type_qualifier).has_interpolation() ||
(yyvsp[0].type_qualifier).has_layout() || (yyvsp[0].type_qualifier).has_auxiliary_storage())) {
_mesa_glsl_error(&(yylsp[-1]), state, "storage qualifiers must come after "
"precise, invariant, interpolation, layout and auxiliary "
"storage qualifiers");
}
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 4697 "src/compiler/glsl/glsl_parser.cpp"
break;
case 179:
#line 2152 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type_qualifier).precision != ast_precision_none)
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate precision qualifier");
if (!(state->has_420pack_or_es31()) &&
(yyvsp[0].type_qualifier).flags.i != 0)
_mesa_glsl_error(&(yylsp[-1]), state, "precision qualifiers must come last");
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).precision = (yyvsp[-1].n);
}
#line 4713 "src/compiler/glsl/glsl_parser.cpp"
break;
case 180:
#line 2164 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
(yyval.type_qualifier).merge_qualifier(&(yylsp[-1]), state, (yyvsp[0].type_qualifier), false);
}
#line 4722 "src/compiler/glsl/glsl_parser.cpp"
break;
case 181:
#line 2172 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.centroid = 1;
}
#line 4731 "src/compiler/glsl/glsl_parser.cpp"
break;
case 182:
#line 2177 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.sample = 1;
}
#line 4740 "src/compiler/glsl/glsl_parser.cpp"
break;
case 183:
#line 2182 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.patch = 1;
}
#line 4749 "src/compiler/glsl/glsl_parser.cpp"
break;
case 184:
#line 2189 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.constant = 1;
}
#line 4758 "src/compiler/glsl/glsl_parser.cpp"
break;
case 185:
#line 2194 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.attribute = 1;
}
#line 4767 "src/compiler/glsl/glsl_parser.cpp"
break;
case 186:
#line 2199 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.varying = 1;
}
#line 4776 "src/compiler/glsl/glsl_parser.cpp"
break;
case 187:
#line 2204 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
}
#line 4785 "src/compiler/glsl/glsl_parser.cpp"
break;
case 188:
#line 2209 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.out = 1;
if (state->stage == MESA_SHADER_GEOMETRY &&
state->has_explicit_attrib_stream()) {
(yyval.type_qualifier).flags.q.stream = 1;
(yyval.type_qualifier).flags.q.explicit_stream = 0;
(yyval.type_qualifier).stream = state->out_qualifier->stream;
}
if (state->has_enhanced_layouts()) {
(yyval.type_qualifier).flags.q.xfb_buffer = 1;
(yyval.type_qualifier).flags.q.explicit_xfb_buffer = 0;
(yyval.type_qualifier).xfb_buffer = state->out_qualifier->xfb_buffer;
}
}
#line 4814 "src/compiler/glsl/glsl_parser.cpp"
break;
case 189:
#line 2234 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
(yyval.type_qualifier).flags.q.out = 1;
if (!state->has_framebuffer_fetch() ||
!state->is_version(130, 300) ||
state->stage != MESA_SHADER_FRAGMENT)
_mesa_glsl_error(&(yylsp[0]), state, "A single interface variable cannot be "
"declared as both input and output");
}
#line 4830 "src/compiler/glsl/glsl_parser.cpp"
break;
case 190:
#line 2246 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.uniform = 1;
}
#line 4839 "src/compiler/glsl/glsl_parser.cpp"
break;
case 191:
#line 2251 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.buffer = 1;
}
#line 4848 "src/compiler/glsl/glsl_parser.cpp"
break;
case 192:
#line 2256 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.shared_storage = 1;
}
#line 4857 "src/compiler/glsl/glsl_parser.cpp"
break;
case 193:
#line 2264 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.coherent = 1;
}
#line 4866 "src/compiler/glsl/glsl_parser.cpp"
break;
case 194:
#line 2269 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q._volatile = 1;
}
#line 4875 "src/compiler/glsl/glsl_parser.cpp"
break;
case 195:
#line 2274 "src/compiler/glsl/glsl_parser.yy"
{
STATIC_ASSERT(sizeof((yyval.type_qualifier).flags.q) <= sizeof((yyval.type_qualifier).flags.i));
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.restrict_flag = 1;
}
#line 4885 "src/compiler/glsl/glsl_parser.cpp"
break;
case 196:
#line 2280 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.read_only = 1;
}
#line 4894 "src/compiler/glsl/glsl_parser.cpp"
break;
case 197:
#line 2285 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.write_only = 1;
}
#line 4903 "src/compiler/glsl/glsl_parser.cpp"
break;
case 198:
#line 2293 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.array_specifier) = new(ctx) ast_array_specifier((yylsp[-1]), new(ctx) ast_expression(
ast_unsized_array_dim, NULL,
NULL, NULL));
(yyval.array_specifier)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 4915 "src/compiler/glsl/glsl_parser.cpp"
break;
case 199:
#line 2301 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.array_specifier) = new(ctx) ast_array_specifier((yylsp[-2]), (yyvsp[-1].expression));
(yyval.array_specifier)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 4925 "src/compiler/glsl/glsl_parser.cpp"
break;
case 200:
#line 2307 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.array_specifier) = (yyvsp[-2].array_specifier);
if (state->check_arrays_of_arrays_allowed(& (yylsp[-2]))) {
(yyval.array_specifier)->add_dimension(new(ctx) ast_expression(ast_unsized_array_dim, NULL,
NULL, NULL));
}
}
#line 4939 "src/compiler/glsl/glsl_parser.cpp"
break;
case 201:
#line 2317 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.array_specifier) = (yyvsp[-3].array_specifier);
if (state->check_arrays_of_arrays_allowed(& (yylsp[-3]))) {
(yyval.array_specifier)->add_dimension((yyvsp[-1].expression));
}
}
#line 4951 "src/compiler/glsl/glsl_parser.cpp"
break;
case 203:
#line 2329 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_specifier) = (yyvsp[-1].type_specifier);
(yyval.type_specifier)->array_specifier = (yyvsp[0].array_specifier);
}
#line 4960 "src/compiler/glsl/glsl_parser.cpp"
break;
case 204:
#line 2337 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[0].type));
(yyval.type_specifier)->set_location((yylsp[0]));
}
#line 4970 "src/compiler/glsl/glsl_parser.cpp"
break;
case 205:
#line 2343 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[0].struct_specifier));
(yyval.type_specifier)->set_location((yylsp[0]));
}
#line 4980 "src/compiler/glsl/glsl_parser.cpp"
break;
case 206:
#line 2349 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[0].identifier));
(yyval.type_specifier)->set_location((yylsp[0]));
}
#line 4990 "src/compiler/glsl/glsl_parser.cpp"
break;
case 207:
#line 2357 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.type) = glsl_type::void_type; }
#line 4996 "src/compiler/glsl/glsl_parser.cpp"
break;
case 208:
#line 2358 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.type) = (yyvsp[0].type); }
#line 5002 "src/compiler/glsl/glsl_parser.cpp"
break;
case 209:
#line 2360 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].type) == glsl_type::int_type) {
(yyval.type) = glsl_type::uint_type;
} else {
_mesa_glsl_error(&(yylsp[-1]), state,
"\"unsigned\" is only allowed before \"int\"");
}
}
#line 5015 "src/compiler/glsl/glsl_parser.cpp"
break;
case 210:
#line 2372 "src/compiler/glsl/glsl_parser.yy"
{
state->check_precision_qualifiers_allowed(&(yylsp[0]));
(yyval.n) = ast_precision_high;
}
#line 5024 "src/compiler/glsl/glsl_parser.cpp"
break;
case 211:
#line 2377 "src/compiler/glsl/glsl_parser.yy"
{
state->check_precision_qualifiers_allowed(&(yylsp[0]));
(yyval.n) = ast_precision_medium;
}
#line 5033 "src/compiler/glsl/glsl_parser.cpp"
break;
case 212:
#line 2382 "src/compiler/glsl/glsl_parser.yy"
{
state->check_precision_qualifiers_allowed(&(yylsp[0]));
(yyval.n) = ast_precision_low;
}
#line 5042 "src/compiler/glsl/glsl_parser.cpp"
break;
case 213:
#line 2390 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[-3].identifier), (yyvsp[-1].declarator_list));
(yyval.struct_specifier)->set_location_range((yylsp[-3]), (yylsp[0]));
state->symbols->add_type((yyvsp[-3].identifier), glsl_type::void_type);
}
#line 5053 "src/compiler/glsl/glsl_parser.cpp"
break;
case 214:
#line 2397 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.struct_specifier) = new(ctx) ast_struct_specifier("#anon_struct", (yyvsp[-1].declarator_list));
(yyval.struct_specifier)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 5071 "src/compiler/glsl/glsl_parser.cpp"
break;
case 215:
#line 2414 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.declarator_list) = (yyvsp[0].declarator_list);
(yyvsp[0].declarator_list)->link.self_link();
}
#line 5080 "src/compiler/glsl/glsl_parser.cpp"
break;
case 216:
#line 2419 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.declarator_list) = (yyvsp[-1].declarator_list);
(yyval.declarator_list)->link.insert_before(& (yyvsp[0].declarator_list)->link);
}
#line 5089 "src/compiler/glsl/glsl_parser.cpp"
break;
case 217:
#line 2427 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_fully_specified_type *const type = (yyvsp[-2].fully_specified_type);
type->set_location((yylsp[-2]));
if (state->has_bindless()) {
ast_type_qualifier input_layout_mask;
input_layout_mask.flags.i = 0;
input_layout_mask.flags.q.coherent = 1;
input_layout_mask.flags.q._volatile = 1;
input_layout_mask.flags.q.restrict_flag = 1;
input_layout_mask.flags.q.read_only = 1;
input_layout_mask.flags.q.write_only = 1;
input_layout_mask.flags.q.explicit_image_format = 1;
if ((type->qualifier.flags.i & ~input_layout_mask.flags.i) != 0) {
_mesa_glsl_error(&(yylsp[-2]), state,
"only precision and image qualifiers may be "
"applied to structure members");
}
} else {
if (type->qualifier.flags.i != 0)
_mesa_glsl_error(&(yylsp[-2]), state,
"only precision qualifiers may be applied to "
"structure members");
}
(yyval.declarator_list) = new(ctx) ast_declarator_list(type);
(yyval.declarator_list)->set_location((yylsp[-1]));
(yyval.declarator_list)->declarations.push_degenerate_list_at_head(& (yyvsp[-1].declaration)->link);
}
#line 5128 "src/compiler/glsl/glsl_parser.cpp"
break;
case 218:
#line 2465 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.declaration) = (yyvsp[0].declaration);
(yyvsp[0].declaration)->link.self_link();
}
#line 5137 "src/compiler/glsl/glsl_parser.cpp"
break;
case 219:
#line 2470 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.declaration) = (yyvsp[-2].declaration);
(yyval.declaration)->link.insert_before(& (yyvsp[0].declaration)->link);
}
#line 5146 "src/compiler/glsl/glsl_parser.cpp"
break;
case 220:
#line 2478 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.declaration) = new(ctx) ast_declaration((yyvsp[0].identifier), NULL, NULL);
(yyval.declaration)->set_location((yylsp[0]));
}
#line 5156 "src/compiler/glsl/glsl_parser.cpp"
break;
case 221:
#line 2484 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.declaration) = new(ctx) ast_declaration((yyvsp[-1].identifier), (yyvsp[0].array_specifier), NULL);
(yyval.declaration)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 5166 "src/compiler/glsl/glsl_parser.cpp"
break;
case 223:
#line 2494 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[-1].expression);
}
#line 5174 "src/compiler/glsl/glsl_parser.cpp"
break;
case 224:
#line 2498 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.expression) = (yyvsp[-2].expression);
}
#line 5182 "src/compiler/glsl/glsl_parser.cpp"
break;
case 225:
#line 2505 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.expression) = new(ctx) ast_aggregate_initializer();
(yyval.expression)->set_location((yylsp[0]));
(yyval.expression)->expressions.push_tail(& (yyvsp[0].expression)->link);
}
#line 5193 "src/compiler/glsl/glsl_parser.cpp"
break;
case 226:
#line 2512 "src/compiler/glsl/glsl_parser.yy"
{
(yyvsp[-2].expression)->expressions.push_tail(& (yyvsp[0].expression)->link);
}
#line 5201 "src/compiler/glsl/glsl_parser.cpp"
break;
case 228:
#line 2524 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = (ast_node *) (yyvsp[0].compound_statement); }
#line 5207 "src/compiler/glsl/glsl_parser.cpp"
break;
case 237:
#line 2540 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL);
(yyval.compound_statement)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 5217 "src/compiler/glsl/glsl_parser.cpp"
break;
case 238:
#line 2546 "src/compiler/glsl/glsl_parser.yy"
{
state->symbols->push_scope();
}
#line 5225 "src/compiler/glsl/glsl_parser.cpp"
break;
case 239:
#line 2550 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[-1].node));
(yyval.compound_statement)->set_location_range((yylsp[-3]), (yylsp[0]));
state->symbols->pop_scope();
}
#line 5236 "src/compiler/glsl/glsl_parser.cpp"
break;
case 240:
#line 2559 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = (ast_node *) (yyvsp[0].compound_statement); }
#line 5242 "src/compiler/glsl/glsl_parser.cpp"
break;
case 242:
#line 2565 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL);
(yyval.compound_statement)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 5252 "src/compiler/glsl/glsl_parser.cpp"
break;
case 243:
#line 2571 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[-1].node));
(yyval.compound_statement)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 5262 "src/compiler/glsl/glsl_parser.cpp"
break;
case 244:
#line 2580 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].node) == NULL) {
_mesa_glsl_error(& (yylsp[0]), state, "<nil> statement");
assert((yyvsp[0].node) != NULL);
}
(yyval.node) = (yyvsp[0].node);
(yyval.node)->link.self_link();
}
#line 5276 "src/compiler/glsl/glsl_parser.cpp"
break;
case 245:
#line 2590 "src/compiler/glsl/glsl_parser.yy"
{
if ((yyvsp[0].node) == NULL) {
_mesa_glsl_error(& (yylsp[0]), state, "<nil> statement");
assert((yyvsp[0].node) != NULL);
}
(yyval.node) = (yyvsp[-1].node);
(yyval.node)->link.insert_before(& (yyvsp[0].node)->link);
}
#line 5289 "src/compiler/glsl/glsl_parser.cpp"
break;
case 246:
#line 2599 "src/compiler/glsl/glsl_parser.yy"
{
if (!state->allow_extension_directive_midshader) {
_mesa_glsl_error(& (yylsp[-1]), state,
"#extension directive is not allowed "
"in the middle of a shader");
YYERROR;
}
}
#line 5302 "src/compiler/glsl/glsl_parser.cpp"
break;
case 247:
#line 2611 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_expression_statement(NULL);
(yyval.node)->set_location((yylsp[0]));
}
#line 5312 "src/compiler/glsl/glsl_parser.cpp"
break;
case 248:
#line 2617 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_expression_statement((yyvsp[-1].expression));
(yyval.node)->set_location((yylsp[-1]));
}
#line 5322 "src/compiler/glsl/glsl_parser.cpp"
break;
case 249:
#line 2626 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = new(state->linalloc) ast_selection_statement((yyvsp[-2].expression), (yyvsp[0].selection_rest_statement).then_statement,
(yyvsp[0].selection_rest_statement).else_statement);
(yyval.node)->set_location_range((yylsp[-4]), (yylsp[0]));
}
#line 5332 "src/compiler/glsl/glsl_parser.cpp"
break;
case 250:
#line 2635 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.selection_rest_statement).then_statement = (yyvsp[-2].node);
(yyval.selection_rest_statement).else_statement = (yyvsp[0].node);
}
#line 5341 "src/compiler/glsl/glsl_parser.cpp"
break;
case 251:
#line 2640 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.selection_rest_statement).then_statement = (yyvsp[0].node);
(yyval.selection_rest_statement).else_statement = NULL;
}
#line 5350 "src/compiler/glsl/glsl_parser.cpp"
break;
case 252:
#line 2648 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = (ast_node *) (yyvsp[0].expression);
}
#line 5358 "src/compiler/glsl/glsl_parser.cpp"
break;
case 253:
#line 2652 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[-2].identifier), NULL, (yyvsp[0].expression));
ast_declarator_list *declarator = new(ctx) ast_declarator_list((yyvsp[-3].fully_specified_type));
decl->set_location_range((yylsp[-2]), (yylsp[0]));
declarator->set_location((yylsp[-3]));
declarator->declarations.push_tail(&decl->link);
(yyval.node) = declarator;
}
#line 5373 "src/compiler/glsl/glsl_parser.cpp"
break;
case 254:
#line 2670 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = new(state->linalloc) ast_switch_statement((yyvsp[-2].expression), (yyvsp[0].switch_body));
(yyval.node)->set_location_range((yylsp[-4]), (yylsp[0]));
}
#line 5382 "src/compiler/glsl/glsl_parser.cpp"
break;
case 255:
#line 2678 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.switch_body) = new(state->linalloc) ast_switch_body(NULL);
(yyval.switch_body)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 5391 "src/compiler/glsl/glsl_parser.cpp"
break;
case 256:
#line 2683 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.switch_body) = new(state->linalloc) ast_switch_body((yyvsp[-1].case_statement_list));
(yyval.switch_body)->set_location_range((yylsp[-2]), (yylsp[0]));
}
#line 5400 "src/compiler/glsl/glsl_parser.cpp"
break;
case 257:
#line 2691 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.case_label) = new(state->linalloc) ast_case_label((yyvsp[-1].expression));
(yyval.case_label)->set_location((yylsp[-1]));
}
#line 5409 "src/compiler/glsl/glsl_parser.cpp"
break;
case 258:
#line 2696 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.case_label) = new(state->linalloc) ast_case_label(NULL);
(yyval.case_label)->set_location((yylsp[0]));
}
#line 5418 "src/compiler/glsl/glsl_parser.cpp"
break;
case 259:
#line 2704 "src/compiler/glsl/glsl_parser.yy"
{
ast_case_label_list *labels = new(state->linalloc) ast_case_label_list();
labels->labels.push_tail(& (yyvsp[0].case_label)->link);
(yyval.case_label_list) = labels;
(yyval.case_label_list)->set_location((yylsp[0]));
}
#line 5430 "src/compiler/glsl/glsl_parser.cpp"
break;
case 260:
#line 2712 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.case_label_list) = (yyvsp[-1].case_label_list);
(yyval.case_label_list)->labels.push_tail(& (yyvsp[0].case_label)->link);
}
#line 5439 "src/compiler/glsl/glsl_parser.cpp"
break;
case 261:
#line 2720 "src/compiler/glsl/glsl_parser.yy"
{
ast_case_statement *stmts = new(state->linalloc) ast_case_statement((yyvsp[-1].case_label_list));
stmts->set_location((yylsp[0]));
stmts->stmts.push_tail(& (yyvsp[0].node)->link);
(yyval.case_statement) = stmts;
}
#line 5451 "src/compiler/glsl/glsl_parser.cpp"
break;
case 262:
#line 2728 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.case_statement) = (yyvsp[-1].case_statement);
(yyval.case_statement)->stmts.push_tail(& (yyvsp[0].node)->link);
}
#line 5460 "src/compiler/glsl/glsl_parser.cpp"
break;
case 263:
#line 2736 "src/compiler/glsl/glsl_parser.yy"
{
ast_case_statement_list *cases= new(state->linalloc) ast_case_statement_list();
cases->set_location((yylsp[0]));
cases->cases.push_tail(& (yyvsp[0].case_statement)->link);
(yyval.case_statement_list) = cases;
}
#line 5472 "src/compiler/glsl/glsl_parser.cpp"
break;
case 264:
#line 2744 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.case_statement_list) = (yyvsp[-1].case_statement_list);
(yyval.case_statement_list)->cases.push_tail(& (yyvsp[0].case_statement)->link);
}
#line 5481 "src/compiler/glsl/glsl_parser.cpp"
break;
case 265:
#line 2752 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while,
NULL, (yyvsp[-2].node), NULL, (yyvsp[0].node));
(yyval.node)->set_location_range((yylsp[-4]), (yylsp[-1]));
}
#line 5492 "src/compiler/glsl/glsl_parser.cpp"
break;
case 266:
#line 2759 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while,
NULL, (yyvsp[-2].expression), NULL, (yyvsp[-5].node));
(yyval.node)->set_location_range((yylsp[-6]), (yylsp[-1]));
}
#line 5503 "src/compiler/glsl/glsl_parser.cpp"
break;
case 267:
#line 2766 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for,
(yyvsp[-3].node), (yyvsp[-2].for_rest_statement).cond, (yyvsp[-2].for_rest_statement).rest, (yyvsp[0].node));
(yyval.node)->set_location_range((yylsp[-5]), (yylsp[0]));
}
#line 5514 "src/compiler/glsl/glsl_parser.cpp"
break;
case 271:
#line 2782 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = NULL;
}
#line 5522 "src/compiler/glsl/glsl_parser.cpp"
break;
case 272:
#line 2789 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.for_rest_statement).cond = (yyvsp[-1].node);
(yyval.for_rest_statement).rest = NULL;
}
#line 5531 "src/compiler/glsl/glsl_parser.cpp"
break;
case 273:
#line 2794 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.for_rest_statement).cond = (yyvsp[-2].node);
(yyval.for_rest_statement).rest = (yyvsp[0].expression);
}
#line 5540 "src/compiler/glsl/glsl_parser.cpp"
break;
case 274:
#line 2803 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL);
(yyval.node)->set_location((yylsp[-1]));
}
#line 5550 "src/compiler/glsl/glsl_parser.cpp"
break;
case 275:
#line 2809 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL);
(yyval.node)->set_location((yylsp[-1]));
}
#line 5560 "src/compiler/glsl/glsl_parser.cpp"
break;
case 276:
#line 2815 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL);
(yyval.node)->set_location((yylsp[-1]));
}
#line 5570 "src/compiler/glsl/glsl_parser.cpp"
break;
case 277:
#line 2821 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[-1].expression));
(yyval.node)->set_location_range((yylsp[-2]), (yylsp[-1]));
}
#line 5580 "src/compiler/glsl/glsl_parser.cpp"
break;
case 278:
#line 2827 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL);
(yyval.node)->set_location((yylsp[-1]));
}
#line 5590 "src/compiler/glsl/glsl_parser.cpp"
break;
case 279:
#line 2836 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.node) = new(ctx) ast_demote_statement();
(yyval.node)->set_location((yylsp[-1]));
}
#line 5600 "src/compiler/glsl/glsl_parser.cpp"
break;
case 280:
#line 2844 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = (yyvsp[0].function_definition); }
#line 5606 "src/compiler/glsl/glsl_parser.cpp"
break;
case 281:
#line 2845 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = (yyvsp[0].node); }
#line 5612 "src/compiler/glsl/glsl_parser.cpp"
break;
case 282:
#line 2846 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = (yyvsp[0].node); }
#line 5618 "src/compiler/glsl/glsl_parser.cpp"
break;
case 283:
#line 2847 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = (yyvsp[0].node); }
#line 5624 "src/compiler/glsl/glsl_parser.cpp"
break;
case 284:
#line 2848 "src/compiler/glsl/glsl_parser.yy"
{ (yyval.node) = NULL; }
#line 5630 "src/compiler/glsl/glsl_parser.cpp"
break;
case 285:
#line 2853 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
(yyval.function_definition) = new(ctx) ast_function_definition();
(yyval.function_definition)->set_location_range((yylsp[-1]), (yylsp[0]));
(yyval.function_definition)->prototype = (yyvsp[-1].function);
(yyval.function_definition)->body = (yyvsp[0].compound_statement);
state->symbols->pop_scope();
}
#line 5644 "src/compiler/glsl/glsl_parser.cpp"
break;
case 286:
#line 2867 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = (yyvsp[0].interface_block);
}
#line 5652 "src/compiler/glsl/glsl_parser.cpp"
break;
case 287:
#line 2871 "src/compiler/glsl/glsl_parser.yy"
{
ast_interface_block *block = (ast_interface_block *) (yyvsp[0].node);
if (!(yyvsp[-1].type_qualifier).merge_qualifier(& (yylsp[-1]), state, block->layout, false,
block->layout.has_layout())) {
YYERROR;
}
block->layout = (yyvsp[-1].type_qualifier);
(yyval.node) = block;
}
#line 5669 "src/compiler/glsl/glsl_parser.cpp"
break;
case 288:
#line 2884 "src/compiler/glsl/glsl_parser.yy"
{
ast_interface_block *block = (ast_interface_block *)(yyvsp[0].node);
if (!block->default_layout.flags.q.buffer) {
_mesa_glsl_error(& (yylsp[-1]), state,
"memory qualifiers can only be used in the "
"declaration of shader storage blocks");
}
if (!(yyvsp[-1].type_qualifier).merge_qualifier(& (yylsp[-1]), state, block->layout, false)) {
YYERROR;
}
block->layout = (yyvsp[-1].type_qualifier);
(yyval.node) = block;
}
#line 5688 "src/compiler/glsl/glsl_parser.cpp"
break;
case 289:
#line 2902 "src/compiler/glsl/glsl_parser.yy"
{
ast_interface_block *const block = (yyvsp[-1].interface_block);
if ((yyvsp[-6].type_qualifier).flags.q.uniform) {
block->default_layout = *state->default_uniform_qualifier;
} else if ((yyvsp[-6].type_qualifier).flags.q.buffer) {
block->default_layout = *state->default_shader_storage_qualifier;
}
block->block_name = (yyvsp[-5].identifier);
block->declarations.push_degenerate_list_at_head(& (yyvsp[-3].declarator_list)->link);
_mesa_ast_process_interface_block(& (yylsp[-6]), state, block, (yyvsp[-6].type_qualifier));
(yyval.interface_block) = block;
}
#line 5708 "src/compiler/glsl/glsl_parser.cpp"
break;
case 290:
#line 2921 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
}
#line 5717 "src/compiler/glsl/glsl_parser.cpp"
break;
case 291:
#line 2926 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.out = 1;
}
#line 5726 "src/compiler/glsl/glsl_parser.cpp"
break;
case 292:
#line 2931 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.uniform = 1;
}
#line 5735 "src/compiler/glsl/glsl_parser.cpp"
break;
case 293:
#line 2936 "src/compiler/glsl/glsl_parser.yy"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.buffer = 1;
}
#line 5744 "src/compiler/glsl/glsl_parser.cpp"
break;
case 294:
#line 2941 "src/compiler/glsl/glsl_parser.yy"
{
if (!(yyvsp[-1].type_qualifier).flags.q.patch) {
_mesa_glsl_error(&(yylsp[-1]), state, "invalid interface qualifier");
}
if ((yyvsp[0].type_qualifier).has_auxiliary_storage()) {
_mesa_glsl_error(&(yylsp[-1]), state, "duplicate patch qualifier");
}
(yyval.type_qualifier) = (yyvsp[0].type_qualifier);
(yyval.type_qualifier).flags.q.patch = 1;
}
#line 5759 "src/compiler/glsl/glsl_parser.cpp"
break;
case 295:
#line 2955 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.interface_block) = new(state->linalloc) ast_interface_block(NULL, NULL);
}
#line 5767 "src/compiler/glsl/glsl_parser.cpp"
break;
case 296:
#line 2959 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.interface_block) = new(state->linalloc) ast_interface_block((yyvsp[0].identifier), NULL);
(yyval.interface_block)->set_location((yylsp[0]));
}
#line 5776 "src/compiler/glsl/glsl_parser.cpp"
break;
case 297:
#line 2964 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.interface_block) = new(state->linalloc) ast_interface_block((yyvsp[-1].identifier), (yyvsp[0].array_specifier));
(yyval.interface_block)->set_location_range((yylsp[-1]), (yylsp[0]));
}
#line 5785 "src/compiler/glsl/glsl_parser.cpp"
break;
case 298:
#line 2972 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.declarator_list) = (yyvsp[0].declarator_list);
(yyvsp[0].declarator_list)->link.self_link();
}
#line 5794 "src/compiler/glsl/glsl_parser.cpp"
break;
case 299:
#line 2977 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.declarator_list) = (yyvsp[-1].declarator_list);
(yyvsp[0].declarator_list)->link.insert_before(& (yyval.declarator_list)->link);
}
#line 5803 "src/compiler/glsl/glsl_parser.cpp"
break;
case 300:
#line 2985 "src/compiler/glsl/glsl_parser.yy"
{
void *ctx = state->linalloc;
ast_fully_specified_type *type = (yyvsp[-2].fully_specified_type);
type->set_location((yylsp[-2]));
if (type->qualifier.flags.q.attribute) {
_mesa_glsl_error(& (yylsp[-2]), state,
"keyword 'attribute' cannot be used with "
"interface block member");
} else if (type->qualifier.flags.q.varying) {
_mesa_glsl_error(& (yylsp[-2]), state,
"keyword 'varying' cannot be used with "
"interface block member");
}
(yyval.declarator_list) = new(ctx) ast_declarator_list(type);
(yyval.declarator_list)->set_location((yylsp[-1]));
(yyval.declarator_list)->declarations.push_degenerate_list_at_head(& (yyvsp[-1].declaration)->link);
}
#line 5828 "src/compiler/glsl/glsl_parser.cpp"
break;
case 301:
#line 3009 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) {
YYERROR;
}
}
#line 5839 "src/compiler/glsl/glsl_parser.cpp"
break;
case 303:
#line 3020 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) {
YYERROR;
}
}
#line 5850 "src/compiler/glsl/glsl_parser.cpp"
break;
case 305:
#line 3031 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) {
YYERROR;
}
if (!(yyval.type_qualifier).validate_in_qualifier(& (yylsp[-1]), state)) {
YYERROR;
}
}
#line 5864 "src/compiler/glsl/glsl_parser.cpp"
break;
case 306:
#line 3041 "src/compiler/glsl/glsl_parser.yy"
{
if (!(yyvsp[-2].type_qualifier).validate_in_qualifier(& (yylsp[-2]), state)) {
YYERROR;
}
}
#line 5874 "src/compiler/glsl/glsl_parser.cpp"
break;
case 307:
#line 3050 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.type_qualifier) = (yyvsp[-1].type_qualifier);
if (!(yyval.type_qualifier).merge_qualifier(& (yylsp[-1]), state, (yyvsp[0].type_qualifier), false, true)) {
YYERROR;
}
if (!(yyval.type_qualifier).validate_out_qualifier(& (yylsp[-1]), state)) {
YYERROR;
}
}
#line 5888 "src/compiler/glsl/glsl_parser.cpp"
break;
case 308:
#line 3060 "src/compiler/glsl/glsl_parser.yy"
{
if (!(yyvsp[-2].type_qualifier).validate_out_qualifier(& (yylsp[-2]), state)) {
YYERROR;
}
}
#line 5898 "src/compiler/glsl/glsl_parser.cpp"
break;
case 309:
#line 3069 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = NULL;
if (!state->default_uniform_qualifier->
merge_qualifier(& (yylsp[0]), state, (yyvsp[0].type_qualifier), false)) {
YYERROR;
}
if (!state->default_uniform_qualifier->
push_to_global(& (yylsp[0]), state)) {
YYERROR;
}
}
#line 5914 "src/compiler/glsl/glsl_parser.cpp"
break;
case 310:
#line 3081 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = NULL;
if (!state->default_shader_storage_qualifier->
merge_qualifier(& (yylsp[0]), state, (yyvsp[0].type_qualifier), false)) {
YYERROR;
}
if (!state->default_shader_storage_qualifier->
push_to_global(& (yylsp[0]), state)) {
YYERROR;
}
if (state->default_shader_storage_qualifier->flags.q.explicit_binding) {
_mesa_glsl_error(& (yylsp[0]), state,
"binding qualifier cannot be set for default layout");
}
}
#line 5940 "src/compiler/glsl/glsl_parser.cpp"
break;
case 311:
#line 3103 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = NULL;
if (!(yyvsp[0].type_qualifier).merge_into_in_qualifier(& (yylsp[0]), state, (yyval.node))) {
YYERROR;
}
if (!state->in_qualifier->push_to_global(& (yylsp[0]), state)) {
YYERROR;
}
}
#line 5954 "src/compiler/glsl/glsl_parser.cpp"
break;
case 312:
#line 3113 "src/compiler/glsl/glsl_parser.yy"
{
(yyval.node) = NULL;
if (!(yyvsp[0].type_qualifier).merge_into_out_qualifier(& (yylsp[0]), state, (yyval.node))) {
YYERROR;
}
if (!state->out_qualifier->push_to_global(& (yylsp[0]), state)) {
YYERROR;
}
}
#line 5968 "src/compiler/glsl/glsl_parser.cpp"
break;
#line 5972 "src/compiler/glsl/glsl_parser.cpp"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
YYPOPSTACK (yylen);
yylen = 0;
YY_STACK_PRINT (yyss, yyssp);
*++yyvsp = yyval;
*++yylsp = yyloc;
{
const int yylhs = yyr1[yyn] - YYNTOKENS;
const int yyi = yypgoto[yylhs] + *yyssp;
yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
? yytable[yyi]
: yydefgoto[yylhs]);
}
goto yynewstate;
yyerrlab:
yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
if (!yyerrstatus)
{
++yynerrs;
#if ! YYERROR_VERBOSE
yyerror (&yylloc, state, YY_("syntax error"));
#else
# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
yyssp, yytoken)
{
char const *yymsgp = YY_("syntax error");
int yysyntax_error_status;
yysyntax_error_status = YYSYNTAX_ERROR;
if (yysyntax_error_status == 0)
yymsgp = yymsg;
else if (yysyntax_error_status == 1)
{
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc)));
if (!yymsg)
{
yymsg = yymsgbuf;
yymsg_alloc = sizeof yymsgbuf;
yysyntax_error_status = 2;
}
else
{
yysyntax_error_status = YYSYNTAX_ERROR;
yymsgp = yymsg;
}
}
yyerror (&yylloc, state, yymsgp);
if (yysyntax_error_status == 2)
goto yyexhaustedlab;
}
# undef YYSYNTAX_ERROR
#endif
}
yyerror_range[1] = yylloc;
if (yyerrstatus == 3)
{
if (yychar <= YYEOF)
{
if (yychar == YYEOF)
YYABORT;
}
else
{
yydestruct ("Error: discarding",
yytoken, &yylval, &yylloc, state);
yychar = YYEMPTY;
}
}
goto yyerrlab1;
yyerrorlab:
if (0)
YYERROR;
YYPOPSTACK (yylen);
yylen = 0;
YY_STACK_PRINT (yyss, yyssp);
yystate = *yyssp;
goto yyerrlab1;
yyerrlab1:
yyerrstatus = 3;
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
{
yyn += YYTERROR;
if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
{
yyn = yytable[yyn];
if (0 < yyn)
break;
}
}
if (yyssp == yyss)
YYABORT;
yyerror_range[1] = *yylsp;
yydestruct ("Error: popping",
yystos[yystate], yyvsp, yylsp, state);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
}
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
*++yyvsp = yylval;
YY_IGNORE_MAYBE_UNINITIALIZED_END
yyerror_range[2] = yylloc;
YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
*++yylsp = yyloc;
YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
yystate = yyn;
goto yynewstate;
yyacceptlab:
yyresult = 0;
goto yyreturn;
yyabortlab:
yyresult = 1;
goto yyreturn;
#if !defined yyoverflow || YYERROR_VERBOSE
yyexhaustedlab:
yyerror (&yylloc, state, YY_("memory exhausted"));
yyresult = 2;
#endif
yyreturn:
if (yychar != YYEMPTY)
{
yytoken = YYTRANSLATE (yychar);
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval, &yylloc, state);
}
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp);
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
yystos[*yyssp], yyvsp, yylsp, state);
YYPOPSTACK (1);
}
#ifndef yyoverflow
if (yyss != yyssa)
YYSTACK_FREE (yyss);
#endif
#if YYERROR_VERBOSE
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
return yyresult;
}