|
1 /* A Bison parser, made by GNU Bison 2.7. */ |
|
2 |
|
3 /* Bison implementation for Yacc-like parsers in C |
|
4 |
|
5 Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. |
|
6 |
|
7 This program is free software: you can redistribute it and/or modify |
|
8 it under the terms of the GNU General Public License as published by |
|
9 the Free Software Foundation, either version 3 of the License, or |
|
10 (at your option) any later version. |
|
11 |
|
12 This program is distributed in the hope that it will be useful, |
|
13 but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
15 GNU General Public License for more details. |
|
16 |
|
17 You should have received a copy of the GNU General Public License |
|
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
|
19 |
|
20 /* As a special exception, you may create a larger work that contains |
|
21 part or all of the Bison parser skeleton and distribute that work |
|
22 under terms of your choice, so long as that work isn't itself a |
|
23 parser generator using the skeleton or a modified version thereof |
|
24 as a parser skeleton. Alternatively, if you modify or redistribute |
|
25 the parser skeleton itself, you may (at your option) remove this |
|
26 special exception, which will cause the skeleton and the resulting |
|
27 Bison output files to be licensed under the GNU General Public |
|
28 License without this special exception. |
|
29 |
|
30 This special exception was added by the Free Software Foundation in |
|
31 version 2.2 of Bison. */ |
|
32 |
|
33 /* C LALR(1) parser skeleton written by Richard Stallman, by |
|
34 simplifying the original so-called "semantic" parser. */ |
|
35 |
|
36 /* All symbols defined below should begin with yy or YY, to avoid |
|
37 infringing on user name space. This should be done even for local |
|
38 variables, as they might otherwise be expanded by user macros. |
|
39 There are some unavoidable exceptions within include files to |
|
40 define necessary library symbols; they are noted "INFRINGES ON |
|
41 USER NAME SPACE" below. */ |
|
42 |
|
43 /* Identify Bison output. */ |
|
44 #define YYBISON 1 |
|
45 |
|
46 /* Bison version. */ |
|
47 #define YYBISON_VERSION "2.7" |
|
48 |
|
49 /* Skeleton name. */ |
|
50 #define YYSKELETON_NAME "yacc.c" |
|
51 |
|
52 /* Pure parsers. */ |
|
53 #define YYPURE 1 |
|
54 |
|
55 /* Push parsers. */ |
|
56 #define YYPUSH 0 |
|
57 |
|
58 /* Pull parsers. */ |
|
59 #define YYPULL 1 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 /* Copy the first part of user declarations. */ |
|
65 |
|
66 |
|
67 // |
|
68 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved. |
|
69 // Use of this source code is governed by a BSD-style license that can be |
|
70 // found in the LICENSE file. |
|
71 // |
|
72 |
|
73 // This file is auto-generated by generate_parser.sh. DO NOT EDIT! |
|
74 |
|
75 // Ignore errors in auto-generated code. |
|
76 #if defined(__GNUC__) |
|
77 #pragma GCC diagnostic ignored "-Wunused-function" |
|
78 #pragma GCC diagnostic ignored "-Wunused-variable" |
|
79 #pragma GCC diagnostic ignored "-Wswitch-enum" |
|
80 #elif defined(_MSC_VER) |
|
81 #pragma warning(disable: 4065) |
|
82 #pragma warning(disable: 4189) |
|
83 #pragma warning(disable: 4505) |
|
84 #pragma warning(disable: 4701) |
|
85 #endif |
|
86 |
|
87 #include "compiler/SymbolTable.h" |
|
88 #include "compiler/ParseHelper.h" |
|
89 #include "GLSLANG/ShaderLang.h" |
|
90 |
|
91 #define YYENABLE_NLS 0 |
|
92 |
|
93 #define YYLEX_PARAM context->scanner |
|
94 |
|
95 |
|
96 |
|
97 # ifndef YY_NULL |
|
98 # if defined __cplusplus && 201103L <= __cplusplus |
|
99 # define YY_NULL nullptr |
|
100 # else |
|
101 # define YY_NULL 0 |
|
102 # endif |
|
103 # endif |
|
104 |
|
105 /* Enabling verbose error messages. */ |
|
106 #ifdef YYERROR_VERBOSE |
|
107 # undef YYERROR_VERBOSE |
|
108 # define YYERROR_VERBOSE 1 |
|
109 #else |
|
110 # define YYERROR_VERBOSE 0 |
|
111 #endif |
|
112 |
|
113 /* In a future release of Bison, this section will be replaced |
|
114 by #include "glslang_tab.h". */ |
|
115 #ifndef YY_YY_GLSLANG_TAB_H_INCLUDED |
|
116 # define YY_YY_GLSLANG_TAB_H_INCLUDED |
|
117 /* Enabling traces. */ |
|
118 #ifndef YYDEBUG |
|
119 # define YYDEBUG 0 |
|
120 #endif |
|
121 #if YYDEBUG |
|
122 extern int yydebug; |
|
123 #endif |
|
124 /* "%code requires" blocks. */ |
|
125 |
|
126 |
|
127 #define YYLTYPE TSourceLoc |
|
128 #define YYLTYPE_IS_DECLARED 1 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 /* Tokens. */ |
|
134 #ifndef YYTOKENTYPE |
|
135 # define YYTOKENTYPE |
|
136 /* Put the tokens into the symbol table, so that GDB and other debuggers |
|
137 know about them. */ |
|
138 enum yytokentype { |
|
139 INVARIANT = 258, |
|
140 HIGH_PRECISION = 259, |
|
141 MEDIUM_PRECISION = 260, |
|
142 LOW_PRECISION = 261, |
|
143 PRECISION = 262, |
|
144 ATTRIBUTE = 263, |
|
145 CONST_QUAL = 264, |
|
146 BOOL_TYPE = 265, |
|
147 FLOAT_TYPE = 266, |
|
148 INT_TYPE = 267, |
|
149 BREAK = 268, |
|
150 CONTINUE = 269, |
|
151 DO = 270, |
|
152 ELSE = 271, |
|
153 FOR = 272, |
|
154 IF = 273, |
|
155 DISCARD = 274, |
|
156 RETURN = 275, |
|
157 BVEC2 = 276, |
|
158 BVEC3 = 277, |
|
159 BVEC4 = 278, |
|
160 IVEC2 = 279, |
|
161 IVEC3 = 280, |
|
162 IVEC4 = 281, |
|
163 VEC2 = 282, |
|
164 VEC3 = 283, |
|
165 VEC4 = 284, |
|
166 MATRIX2 = 285, |
|
167 MATRIX3 = 286, |
|
168 MATRIX4 = 287, |
|
169 IN_QUAL = 288, |
|
170 OUT_QUAL = 289, |
|
171 INOUT_QUAL = 290, |
|
172 UNIFORM = 291, |
|
173 VARYING = 292, |
|
174 STRUCT = 293, |
|
175 VOID_TYPE = 294, |
|
176 WHILE = 295, |
|
177 SAMPLER2D = 296, |
|
178 SAMPLERCUBE = 297, |
|
179 SAMPLER_EXTERNAL_OES = 298, |
|
180 SAMPLER2DRECT = 299, |
|
181 IDENTIFIER = 300, |
|
182 TYPE_NAME = 301, |
|
183 FLOATCONSTANT = 302, |
|
184 INTCONSTANT = 303, |
|
185 BOOLCONSTANT = 304, |
|
186 LEFT_OP = 305, |
|
187 RIGHT_OP = 306, |
|
188 INC_OP = 307, |
|
189 DEC_OP = 308, |
|
190 LE_OP = 309, |
|
191 GE_OP = 310, |
|
192 EQ_OP = 311, |
|
193 NE_OP = 312, |
|
194 AND_OP = 313, |
|
195 OR_OP = 314, |
|
196 XOR_OP = 315, |
|
197 MUL_ASSIGN = 316, |
|
198 DIV_ASSIGN = 317, |
|
199 ADD_ASSIGN = 318, |
|
200 MOD_ASSIGN = 319, |
|
201 LEFT_ASSIGN = 320, |
|
202 RIGHT_ASSIGN = 321, |
|
203 AND_ASSIGN = 322, |
|
204 XOR_ASSIGN = 323, |
|
205 OR_ASSIGN = 324, |
|
206 SUB_ASSIGN = 325, |
|
207 LEFT_PAREN = 326, |
|
208 RIGHT_PAREN = 327, |
|
209 LEFT_BRACKET = 328, |
|
210 RIGHT_BRACKET = 329, |
|
211 LEFT_BRACE = 330, |
|
212 RIGHT_BRACE = 331, |
|
213 DOT = 332, |
|
214 COMMA = 333, |
|
215 COLON = 334, |
|
216 EQUAL = 335, |
|
217 SEMICOLON = 336, |
|
218 BANG = 337, |
|
219 DASH = 338, |
|
220 TILDE = 339, |
|
221 PLUS = 340, |
|
222 STAR = 341, |
|
223 SLASH = 342, |
|
224 PERCENT = 343, |
|
225 LEFT_ANGLE = 344, |
|
226 RIGHT_ANGLE = 345, |
|
227 VERTICAL_BAR = 346, |
|
228 CARET = 347, |
|
229 AMPERSAND = 348, |
|
230 QUESTION = 349 |
|
231 }; |
|
232 #endif |
|
233 |
|
234 |
|
235 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED |
|
236 typedef union YYSTYPE |
|
237 { |
|
238 |
|
239 |
|
240 struct { |
|
241 union { |
|
242 TString *string; |
|
243 float f; |
|
244 int i; |
|
245 bool b; |
|
246 }; |
|
247 TSymbol* symbol; |
|
248 } lex; |
|
249 struct { |
|
250 TOperator op; |
|
251 union { |
|
252 TIntermNode* intermNode; |
|
253 TIntermNodePair nodePair; |
|
254 TIntermTyped* intermTypedNode; |
|
255 TIntermAggregate* intermAggregate; |
|
256 }; |
|
257 union { |
|
258 TPublicType type; |
|
259 TPrecision precision; |
|
260 TQualifier qualifier; |
|
261 TFunction* function; |
|
262 TParameter param; |
|
263 TField* field; |
|
264 TFieldList* fieldList; |
|
265 }; |
|
266 } interm; |
|
267 |
|
268 |
|
269 |
|
270 } YYSTYPE; |
|
271 # define YYSTYPE_IS_TRIVIAL 1 |
|
272 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ |
|
273 # define YYSTYPE_IS_DECLARED 1 |
|
274 #endif |
|
275 |
|
276 #if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED |
|
277 typedef struct YYLTYPE |
|
278 { |
|
279 int first_line; |
|
280 int first_column; |
|
281 int last_line; |
|
282 int last_column; |
|
283 } YYLTYPE; |
|
284 # define yyltype YYLTYPE /* obsolescent; will be withdrawn */ |
|
285 # define YYLTYPE_IS_DECLARED 1 |
|
286 # define YYLTYPE_IS_TRIVIAL 1 |
|
287 #endif |
|
288 |
|
289 |
|
290 #ifdef YYPARSE_PARAM |
|
291 #if defined __STDC__ || defined __cplusplus |
|
292 int yyparse (void *YYPARSE_PARAM); |
|
293 #else |
|
294 int yyparse (); |
|
295 #endif |
|
296 #else /* ! YYPARSE_PARAM */ |
|
297 #if defined __STDC__ || defined __cplusplus |
|
298 int yyparse (TParseContext* context); |
|
299 #else |
|
300 int yyparse (); |
|
301 #endif |
|
302 #endif /* ! YYPARSE_PARAM */ |
|
303 |
|
304 #endif /* !YY_YY_GLSLANG_TAB_H_INCLUDED */ |
|
305 |
|
306 /* Copy the second part of user declarations. */ |
|
307 |
|
308 |
|
309 extern int yylex(YYSTYPE* yylval, YYLTYPE* yylloc, void* yyscanner); |
|
310 static void yyerror(YYLTYPE* yylloc, TParseContext* context, const char* reason); |
|
311 |
|
312 #define YYLLOC_DEFAULT(Current, Rhs, N) \ |
|
313 do { \ |
|
314 if (YYID(N)) { \ |
|
315 (Current).first_file = YYRHSLOC(Rhs, 1).first_file; \ |
|
316 (Current).first_line = YYRHSLOC(Rhs, 1).first_line; \ |
|
317 (Current).last_file = YYRHSLOC(Rhs, N).last_file; \ |
|
318 (Current).last_line = YYRHSLOC(Rhs, N).last_line; \ |
|
319 } \ |
|
320 else { \ |
|
321 (Current).first_file = YYRHSLOC(Rhs, 0).last_file; \ |
|
322 (Current).first_line = YYRHSLOC(Rhs, 0).last_line; \ |
|
323 (Current).last_file = YYRHSLOC(Rhs, 0).last_file; \ |
|
324 (Current).last_line = YYRHSLOC(Rhs, 0).last_line; \ |
|
325 } \ |
|
326 } while (0) |
|
327 |
|
328 #define VERTEX_ONLY(S, L) { \ |
|
329 if (context->shaderType != SH_VERTEX_SHADER) { \ |
|
330 context->error(L, " supported in vertex shaders only ", S); \ |
|
331 context->recover(); \ |
|
332 } \ |
|
333 } |
|
334 |
|
335 #define FRAG_ONLY(S, L) { \ |
|
336 if (context->shaderType != SH_FRAGMENT_SHADER) { \ |
|
337 context->error(L, " supported in fragment shaders only ", S); \ |
|
338 context->recover(); \ |
|
339 } \ |
|
340 } |
|
341 |
|
342 |
|
343 |
|
344 #ifdef short |
|
345 # undef short |
|
346 #endif |
|
347 |
|
348 #ifdef YYTYPE_UINT8 |
|
349 typedef YYTYPE_UINT8 yytype_uint8; |
|
350 #else |
|
351 typedef unsigned char yytype_uint8; |
|
352 #endif |
|
353 |
|
354 #ifdef YYTYPE_INT8 |
|
355 typedef YYTYPE_INT8 yytype_int8; |
|
356 #elif (defined __STDC__ || defined __C99__FUNC__ \ |
|
357 || defined __cplusplus || defined _MSC_VER) |
|
358 typedef signed char yytype_int8; |
|
359 #else |
|
360 typedef short int yytype_int8; |
|
361 #endif |
|
362 |
|
363 #ifdef YYTYPE_UINT16 |
|
364 typedef YYTYPE_UINT16 yytype_uint16; |
|
365 #else |
|
366 typedef unsigned short int yytype_uint16; |
|
367 #endif |
|
368 |
|
369 #ifdef YYTYPE_INT16 |
|
370 typedef YYTYPE_INT16 yytype_int16; |
|
371 #else |
|
372 typedef short int yytype_int16; |
|
373 #endif |
|
374 |
|
375 #ifndef YYSIZE_T |
|
376 # ifdef __SIZE_TYPE__ |
|
377 # define YYSIZE_T __SIZE_TYPE__ |
|
378 # elif defined size_t |
|
379 # define YYSIZE_T size_t |
|
380 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ |
|
381 || defined __cplusplus || defined _MSC_VER) |
|
382 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ |
|
383 # define YYSIZE_T size_t |
|
384 # else |
|
385 # define YYSIZE_T unsigned int |
|
386 # endif |
|
387 #endif |
|
388 |
|
389 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) |
|
390 |
|
391 #ifndef YY_ |
|
392 # if defined YYENABLE_NLS && YYENABLE_NLS |
|
393 # if ENABLE_NLS |
|
394 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ |
|
395 # define YY_(Msgid) dgettext ("bison-runtime", Msgid) |
|
396 # endif |
|
397 # endif |
|
398 # ifndef YY_ |
|
399 # define YY_(Msgid) Msgid |
|
400 # endif |
|
401 #endif |
|
402 |
|
403 /* Suppress unused-variable warnings by "using" E. */ |
|
404 #if ! defined lint || defined __GNUC__ |
|
405 # define YYUSE(E) ((void) (E)) |
|
406 #else |
|
407 # define YYUSE(E) /* empty */ |
|
408 #endif |
|
409 |
|
410 /* Identity function, used to suppress warnings about constant conditions. */ |
|
411 #ifndef lint |
|
412 # define YYID(N) (N) |
|
413 #else |
|
414 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
415 || defined __cplusplus || defined _MSC_VER) |
|
416 static int |
|
417 YYID (int yyi) |
|
418 #else |
|
419 static int |
|
420 YYID (yyi) |
|
421 int yyi; |
|
422 #endif |
|
423 { |
|
424 return yyi; |
|
425 } |
|
426 #endif |
|
427 |
|
428 #if ! defined yyoverflow || YYERROR_VERBOSE |
|
429 |
|
430 /* The parser invokes alloca or malloc; define the necessary symbols. */ |
|
431 |
|
432 # ifdef YYSTACK_USE_ALLOCA |
|
433 # if YYSTACK_USE_ALLOCA |
|
434 # ifdef __GNUC__ |
|
435 # define YYSTACK_ALLOC __builtin_alloca |
|
436 # elif defined __BUILTIN_VA_ARG_INCR |
|
437 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ |
|
438 # elif defined _AIX |
|
439 # define YYSTACK_ALLOC __alloca |
|
440 # elif defined _MSC_VER |
|
441 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ |
|
442 # define alloca _alloca |
|
443 # else |
|
444 # define YYSTACK_ALLOC alloca |
|
445 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
|
446 || defined __cplusplus || defined _MSC_VER) |
|
447 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
|
448 /* Use EXIT_SUCCESS as a witness for stdlib.h. */ |
|
449 # ifndef EXIT_SUCCESS |
|
450 # define EXIT_SUCCESS 0 |
|
451 # endif |
|
452 # endif |
|
453 # endif |
|
454 # endif |
|
455 # endif |
|
456 |
|
457 # ifdef YYSTACK_ALLOC |
|
458 /* Pacify GCC's `empty if-body' warning. */ |
|
459 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) |
|
460 # ifndef YYSTACK_ALLOC_MAXIMUM |
|
461 /* The OS might guarantee only one guard page at the bottom of the stack, |
|
462 and a page size can be as small as 4096 bytes. So we cannot safely |
|
463 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number |
|
464 to allow for a few compiler-allocated temporary stack slots. */ |
|
465 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ |
|
466 # endif |
|
467 # else |
|
468 # define YYSTACK_ALLOC YYMALLOC |
|
469 # define YYSTACK_FREE YYFREE |
|
470 # ifndef YYSTACK_ALLOC_MAXIMUM |
|
471 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM |
|
472 # endif |
|
473 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ |
|
474 && ! ((defined YYMALLOC || defined malloc) \ |
|
475 && (defined YYFREE || defined free))) |
|
476 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ |
|
477 # ifndef EXIT_SUCCESS |
|
478 # define EXIT_SUCCESS 0 |
|
479 # endif |
|
480 # endif |
|
481 # ifndef YYMALLOC |
|
482 # define YYMALLOC malloc |
|
483 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
|
484 || defined __cplusplus || defined _MSC_VER) |
|
485 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ |
|
486 # endif |
|
487 # endif |
|
488 # ifndef YYFREE |
|
489 # define YYFREE free |
|
490 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ |
|
491 || defined __cplusplus || defined _MSC_VER) |
|
492 void free (void *); /* INFRINGES ON USER NAME SPACE */ |
|
493 # endif |
|
494 # endif |
|
495 # endif |
|
496 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ |
|
497 |
|
498 |
|
499 #if (! defined yyoverflow \ |
|
500 && (! defined __cplusplus \ |
|
501 || (defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \ |
|
502 && defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) |
|
503 |
|
504 /* A type that is properly aligned for any stack member. */ |
|
505 union yyalloc |
|
506 { |
|
507 yytype_int16 yyss_alloc; |
|
508 YYSTYPE yyvs_alloc; |
|
509 YYLTYPE yyls_alloc; |
|
510 }; |
|
511 |
|
512 /* The size of the maximum gap between one aligned stack and the next. */ |
|
513 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) |
|
514 |
|
515 /* The size of an array large to enough to hold all stacks, each with |
|
516 N elements. */ |
|
517 # define YYSTACK_BYTES(N) \ |
|
518 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE) + sizeof (YYLTYPE)) \ |
|
519 + 2 * YYSTACK_GAP_MAXIMUM) |
|
520 |
|
521 # define YYCOPY_NEEDED 1 |
|
522 |
|
523 /* Relocate STACK from its old location to the new one. The |
|
524 local variables YYSIZE and YYSTACKSIZE give the old and new number of |
|
525 elements in the stack, and YYPTR gives the new location of the |
|
526 stack. Advance YYPTR to a properly aligned location for the next |
|
527 stack. */ |
|
528 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ |
|
529 do \ |
|
530 { \ |
|
531 YYSIZE_T yynewbytes; \ |
|
532 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ |
|
533 Stack = &yyptr->Stack_alloc; \ |
|
534 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ |
|
535 yyptr += yynewbytes / sizeof (*yyptr); \ |
|
536 } \ |
|
537 while (YYID (0)) |
|
538 |
|
539 #endif |
|
540 |
|
541 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED |
|
542 /* Copy COUNT objects from SRC to DST. The source and destination do |
|
543 not overlap. */ |
|
544 # ifndef YYCOPY |
|
545 # if defined __GNUC__ && 1 < __GNUC__ |
|
546 # define YYCOPY(Dst, Src, Count) \ |
|
547 __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) |
|
548 # else |
|
549 # define YYCOPY(Dst, Src, Count) \ |
|
550 do \ |
|
551 { \ |
|
552 YYSIZE_T yyi; \ |
|
553 for (yyi = 0; yyi < (Count); yyi++) \ |
|
554 (Dst)[yyi] = (Src)[yyi]; \ |
|
555 } \ |
|
556 while (YYID (0)) |
|
557 # endif |
|
558 # endif |
|
559 #endif /* !YYCOPY_NEEDED */ |
|
560 |
|
561 /* YYFINAL -- State number of the termination state. */ |
|
562 #define YYFINAL 74 |
|
563 /* YYLAST -- Last index in YYTABLE. */ |
|
564 #define YYLAST 1490 |
|
565 |
|
566 /* YYNTOKENS -- Number of terminals. */ |
|
567 #define YYNTOKENS 95 |
|
568 /* YYNNTS -- Number of nonterminals. */ |
|
569 #define YYNNTS 84 |
|
570 /* YYNRULES -- Number of rules. */ |
|
571 #define YYNRULES 202 |
|
572 /* YYNRULES -- Number of states. */ |
|
573 #define YYNSTATES 307 |
|
574 |
|
575 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ |
|
576 #define YYUNDEFTOK 2 |
|
577 #define YYMAXUTOK 349 |
|
578 |
|
579 #define YYTRANSLATE(YYX) \ |
|
580 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) |
|
581 |
|
582 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ |
|
583 static const yytype_uint8 yytranslate[] = |
|
584 { |
|
585 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
586 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
587 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
588 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
589 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
590 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
591 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
592 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
593 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
594 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
595 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
596 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
597 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
598 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
599 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
600 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
601 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
602 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
603 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
604 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
605 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
606 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
607 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
608 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
609 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, |
|
610 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, |
|
611 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, |
|
612 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, |
|
613 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, |
|
614 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, |
|
615 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, |
|
616 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, |
|
617 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, |
|
618 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, |
|
619 85, 86, 87, 88, 89, 90, 91, 92, 93, 94 |
|
620 }; |
|
621 |
|
622 #if YYDEBUG |
|
623 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in |
|
624 YYRHS. */ |
|
625 static const yytype_uint16 yyprhs[] = |
|
626 { |
|
627 0, 0, 3, 5, 7, 9, 11, 13, 15, 17, |
|
628 21, 23, 28, 30, 34, 37, 40, 42, 44, 46, |
|
629 50, 53, 56, 59, 61, 64, 68, 71, 73, 75, |
|
630 77, 80, 83, 86, 88, 90, 92, 94, 98, 102, |
|
631 104, 108, 112, 114, 116, 120, 124, 128, 132, 134, |
|
632 138, 142, 144, 146, 148, 150, 154, 156, 160, 162, |
|
633 166, 168, 174, 176, 180, 182, 184, 186, 188, 190, |
|
634 192, 196, 198, 201, 204, 209, 212, 214, 216, 219, |
|
635 223, 227, 230, 236, 240, 243, 247, 250, 251, 253, |
|
636 255, 257, 259, 261, 265, 271, 278, 284, 286, 289, |
|
637 294, 300, 305, 308, 310, 313, 315, 317, 319, 322, |
|
638 324, 326, 329, 331, 333, 335, 337, 342, 344, 346, |
|
639 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, |
|
640 368, 370, 372, 374, 376, 378, 380, 382, 384, 386, |
|
641 387, 394, 395, 401, 403, 406, 410, 412, 416, 418, |
|
642 423, 425, 427, 429, 431, 433, 435, 437, 439, 441, |
|
643 444, 445, 446, 452, 454, 456, 457, 460, 461, 464, |
|
644 467, 471, 473, 476, 478, 481, 487, 491, 493, 495, |
|
645 500, 501, 508, 509, 518, 519, 527, 529, 531, 533, |
|
646 534, 537, 541, 544, 547, 550, 554, 557, 559, 562, |
|
647 564, 566, 567 |
|
648 }; |
|
649 |
|
650 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ |
|
651 static const yytype_int16 yyrhs[] = |
|
652 { |
|
653 175, 0, -1, 45, -1, 46, -1, 45, -1, 97, |
|
654 -1, 48, -1, 47, -1, 49, -1, 71, 124, 72, |
|
655 -1, 98, -1, 99, 73, 100, 74, -1, 101, -1, |
|
656 99, 77, 96, -1, 99, 52, -1, 99, 53, -1, |
|
657 124, -1, 102, -1, 103, -1, 99, 77, 103, -1, |
|
658 105, 72, -1, 104, 72, -1, 106, 39, -1, 106, |
|
659 -1, 106, 122, -1, 105, 78, 122, -1, 107, 71, |
|
660 -1, 142, -1, 45, -1, 99, -1, 52, 108, -1, |
|
661 53, 108, -1, 109, 108, -1, 85, -1, 83, -1, |
|
662 82, -1, 108, -1, 110, 86, 108, -1, 110, 87, |
|
663 108, -1, 110, -1, 111, 85, 110, -1, 111, 83, |
|
664 110, -1, 111, -1, 112, -1, 113, 89, 112, -1, |
|
665 113, 90, 112, -1, 113, 54, 112, -1, 113, 55, |
|
666 112, -1, 113, -1, 114, 56, 113, -1, 114, 57, |
|
667 113, -1, 114, -1, 115, -1, 116, -1, 117, -1, |
|
668 118, 58, 117, -1, 118, -1, 119, 60, 118, -1, |
|
669 119, -1, 120, 59, 119, -1, 120, -1, 120, 94, |
|
670 124, 79, 122, -1, 121, -1, 108, 123, 122, -1, |
|
671 80, -1, 61, -1, 62, -1, 63, -1, 70, -1, |
|
672 122, -1, 124, 78, 122, -1, 121, -1, 127, 81, |
|
673 -1, 135, 81, -1, 7, 140, 141, 81, -1, 128, |
|
674 72, -1, 130, -1, 129, -1, 130, 132, -1, 129, |
|
675 78, 132, -1, 137, 45, 71, -1, 139, 96, -1, |
|
676 139, 96, 73, 125, 74, -1, 138, 133, 131, -1, |
|
677 133, 131, -1, 138, 133, 134, -1, 133, 134, -1, |
|
678 -1, 33, -1, 34, -1, 35, -1, 139, -1, 136, |
|
679 -1, 135, 78, 96, -1, 135, 78, 96, 73, 74, |
|
680 -1, 135, 78, 96, 73, 125, 74, -1, 135, 78, |
|
681 96, 80, 150, -1, 137, -1, 137, 96, -1, 137, |
|
682 96, 73, 74, -1, 137, 96, 73, 125, 74, -1, |
|
683 137, 96, 80, 150, -1, 3, 45, -1, 139, -1, |
|
684 138, 139, -1, 9, -1, 8, -1, 37, -1, 3, |
|
685 37, -1, 36, -1, 141, -1, 140, 141, -1, 4, |
|
686 -1, 5, -1, 6, -1, 142, -1, 142, 73, 125, |
|
687 74, -1, 39, -1, 11, -1, 12, -1, 10, -1, |
|
688 27, -1, 28, -1, 29, -1, 21, -1, 22, -1, |
|
689 23, -1, 24, -1, 25, -1, 26, -1, 30, -1, |
|
690 31, -1, 32, -1, 41, -1, 42, -1, 43, -1, |
|
691 44, -1, 143, -1, 46, -1, -1, 38, 96, 75, |
|
692 144, 146, 76, -1, -1, 38, 75, 145, 146, 76, |
|
693 -1, 147, -1, 146, 147, -1, 139, 148, 81, -1, |
|
694 149, -1, 148, 78, 149, -1, 96, -1, 96, 73, |
|
695 125, 74, -1, 122, -1, 126, -1, 154, -1, 153, |
|
696 -1, 151, -1, 163, -1, 164, -1, 167, -1, 174, |
|
697 -1, 75, 76, -1, -1, -1, 75, 155, 162, 156, |
|
698 76, -1, 161, -1, 153, -1, -1, 159, 161, -1, |
|
699 -1, 160, 153, -1, 75, 76, -1, 75, 162, 76, |
|
700 -1, 152, -1, 162, 152, -1, 81, -1, 124, 81, |
|
701 -1, 18, 71, 124, 72, 165, -1, 158, 16, 158, |
|
702 -1, 158, -1, 124, -1, 137, 96, 80, 150, -1, |
|
703 -1, 40, 71, 168, 166, 72, 157, -1, -1, 15, |
|
704 169, 158, 40, 71, 124, 72, 81, -1, -1, 17, |
|
705 71, 170, 171, 173, 72, 157, -1, 163, -1, 151, |
|
706 -1, 166, -1, -1, 172, 81, -1, 172, 81, 124, |
|
707 -1, 14, 81, -1, 13, 81, -1, 20, 81, -1, |
|
708 20, 124, 81, -1, 19, 81, -1, 176, -1, 175, |
|
709 176, -1, 177, -1, 126, -1, -1, 127, 178, 161, |
|
710 -1 |
|
711 }; |
|
712 |
|
713 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ |
|
714 static const yytype_uint16 yyrline[] = |
|
715 { |
|
716 0, 179, 179, 180, 183, 226, 229, 242, 247, 252, |
|
717 258, 261, 264, 267, 362, 372, 385, 393, 493, 496, |
|
718 504, 507, 513, 517, 524, 530, 539, 547, 602, 612, |
|
719 615, 625, 635, 656, 657, 658, 663, 664, 672, 683, |
|
720 684, 692, 703, 707, 708, 718, 728, 738, 751, 752, |
|
721 762, 775, 779, 783, 787, 788, 801, 802, 815, 816, |
|
722 829, 830, 847, 848, 861, 862, 863, 864, 865, 869, |
|
723 872, 883, 891, 918, 923, 937, 992, 995, 1002, 1010, |
|
724 1031, 1052, 1062, 1090, 1095, 1105, 1110, 1120, 1123, 1126, |
|
725 1129, 1135, 1142, 1145, 1167, 1185, 1209, 1232, 1236, 1254, |
|
726 1262, 1294, 1314, 1335, 1344, 1367, 1370, 1376, 1384, 1392, |
|
727 1400, 1410, 1417, 1420, 1423, 1429, 1432, 1447, 1451, 1455, |
|
728 1459, 1463, 1468, 1473, 1478, 1483, 1488, 1493, 1498, 1503, |
|
729 1508, 1513, 1518, 1523, 1527, 1531, 1539, 1547, 1551, 1564, |
|
730 1564, 1578, 1578, 1587, 1590, 1606, 1639, 1643, 1649, 1656, |
|
731 1671, 1675, 1679, 1680, 1686, 1687, 1688, 1689, 1690, 1694, |
|
732 1695, 1695, 1695, 1705, 1706, 1710, 1710, 1711, 1711, 1716, |
|
733 1719, 1729, 1732, 1738, 1739, 1743, 1751, 1755, 1765, 1770, |
|
734 1787, 1787, 1792, 1792, 1799, 1799, 1807, 1810, 1816, 1819, |
|
735 1825, 1829, 1836, 1843, 1850, 1857, 1868, 1877, 1881, 1888, |
|
736 1891, 1897, 1897 |
|
737 }; |
|
738 #endif |
|
739 |
|
740 #if YYDEBUG || YYERROR_VERBOSE || 0 |
|
741 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. |
|
742 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ |
|
743 static const char *const yytname[] = |
|
744 { |
|
745 "$end", "error", "$undefined", "INVARIANT", "HIGH_PRECISION", |
|
746 "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "ATTRIBUTE", |
|
747 "CONST_QUAL", "BOOL_TYPE", "FLOAT_TYPE", "INT_TYPE", "BREAK", "CONTINUE", |
|
748 "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "BVEC2", "BVEC3", |
|
749 "BVEC4", "IVEC2", "IVEC3", "IVEC4", "VEC2", "VEC3", "VEC4", "MATRIX2", |
|
750 "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM", |
|
751 "VARYING", "STRUCT", "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", |
|
752 "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT", "IDENTIFIER", "TYPE_NAME", |
|
753 "FLOATCONSTANT", "INTCONSTANT", "BOOLCONSTANT", "LEFT_OP", "RIGHT_OP", |
|
754 "INC_OP", "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", |
|
755 "OR_OP", "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", |
|
756 "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", |
|
757 "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", |
|
758 "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON", |
|
759 "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", |
|
760 "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", |
|
761 "AMPERSAND", "QUESTION", "$accept", "identifier", "variable_identifier", |
|
762 "primary_expression", "postfix_expression", "integer_expression", |
|
763 "function_call", "function_call_or_method", "function_call_generic", |
|
764 "function_call_header_no_parameters", |
|
765 "function_call_header_with_parameters", "function_call_header", |
|
766 "function_identifier", "unary_expression", "unary_operator", |
|
767 "multiplicative_expression", "additive_expression", "shift_expression", |
|
768 "relational_expression", "equality_expression", "and_expression", |
|
769 "exclusive_or_expression", "inclusive_or_expression", |
|
770 "logical_and_expression", "logical_xor_expression", |
|
771 "logical_or_expression", "conditional_expression", |
|
772 "assignment_expression", "assignment_operator", "expression", |
|
773 "constant_expression", "declaration", "function_prototype", |
|
774 "function_declarator", "function_header_with_parameters", |
|
775 "function_header", "parameter_declarator", "parameter_declaration", |
|
776 "parameter_qualifier", "parameter_type_specifier", |
|
777 "init_declarator_list", "single_declaration", "fully_specified_type", |
|
778 "type_qualifier", "type_specifier", "precision_qualifier", |
|
779 "type_specifier_no_prec", "type_specifier_nonarray", "struct_specifier", |
|
780 "$@1", "$@2", "struct_declaration_list", "struct_declaration", |
|
781 "struct_declarator_list", "struct_declarator", "initializer", |
|
782 "declaration_statement", "statement", "simple_statement", |
|
783 "compound_statement", "$@3", "$@4", "statement_no_new_scope", |
|
784 "statement_with_scope", "$@5", "$@6", "compound_statement_no_new_scope", |
|
785 "statement_list", "expression_statement", "selection_statement", |
|
786 "selection_rest_statement", "condition", "iteration_statement", "$@7", |
|
787 "$@8", "$@9", "for_init_statement", "conditionopt", "for_rest_statement", |
|
788 "jump_statement", "translation_unit", "external_declaration", |
|
789 "function_definition", "$@10", YY_NULL |
|
790 }; |
|
791 #endif |
|
792 |
|
793 # ifdef YYPRINT |
|
794 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to |
|
795 token YYLEX-NUM. */ |
|
796 static const yytype_uint16 yytoknum[] = |
|
797 { |
|
798 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, |
|
799 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, |
|
800 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, |
|
801 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, |
|
802 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, |
|
803 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, |
|
804 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, |
|
805 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, |
|
806 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, |
|
807 345, 346, 347, 348, 349 |
|
808 }; |
|
809 # endif |
|
810 |
|
811 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ |
|
812 static const yytype_uint8 yyr1[] = |
|
813 { |
|
814 0, 95, 96, 96, 97, 98, 98, 98, 98, 98, |
|
815 99, 99, 99, 99, 99, 99, 100, 101, 102, 102, |
|
816 103, 103, 104, 104, 105, 105, 106, 107, 107, 108, |
|
817 108, 108, 108, 109, 109, 109, 110, 110, 110, 111, |
|
818 111, 111, 112, 113, 113, 113, 113, 113, 114, 114, |
|
819 114, 115, 116, 117, 118, 118, 119, 119, 120, 120, |
|
820 121, 121, 122, 122, 123, 123, 123, 123, 123, 124, |
|
821 124, 125, 126, 126, 126, 127, 128, 128, 129, 129, |
|
822 130, 131, 131, 132, 132, 132, 132, 133, 133, 133, |
|
823 133, 134, 135, 135, 135, 135, 135, 136, 136, 136, |
|
824 136, 136, 136, 137, 137, 138, 138, 138, 138, 138, |
|
825 139, 139, 140, 140, 140, 141, 141, 142, 142, 142, |
|
826 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, |
|
827 142, 142, 142, 142, 142, 142, 142, 142, 142, 144, |
|
828 143, 145, 143, 146, 146, 147, 148, 148, 149, 149, |
|
829 150, 151, 152, 152, 153, 153, 153, 153, 153, 154, |
|
830 155, 156, 154, 157, 157, 159, 158, 160, 158, 161, |
|
831 161, 162, 162, 163, 163, 164, 165, 165, 166, 166, |
|
832 168, 167, 169, 167, 170, 167, 171, 171, 172, 172, |
|
833 173, 173, 174, 174, 174, 174, 174, 175, 175, 176, |
|
834 176, 178, 177 |
|
835 }; |
|
836 |
|
837 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ |
|
838 static const yytype_uint8 yyr2[] = |
|
839 { |
|
840 0, 2, 1, 1, 1, 1, 1, 1, 1, 3, |
|
841 1, 4, 1, 3, 2, 2, 1, 1, 1, 3, |
|
842 2, 2, 2, 1, 2, 3, 2, 1, 1, 1, |
|
843 2, 2, 2, 1, 1, 1, 1, 3, 3, 1, |
|
844 3, 3, 1, 1, 3, 3, 3, 3, 1, 3, |
|
845 3, 1, 1, 1, 1, 3, 1, 3, 1, 3, |
|
846 1, 5, 1, 3, 1, 1, 1, 1, 1, 1, |
|
847 3, 1, 2, 2, 4, 2, 1, 1, 2, 3, |
|
848 3, 2, 5, 3, 2, 3, 2, 0, 1, 1, |
|
849 1, 1, 1, 3, 5, 6, 5, 1, 2, 4, |
|
850 5, 4, 2, 1, 2, 1, 1, 1, 2, 1, |
|
851 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, |
|
852 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, |
|
853 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, |
|
854 6, 0, 5, 1, 2, 3, 1, 3, 1, 4, |
|
855 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, |
|
856 0, 0, 5, 1, 1, 0, 2, 0, 2, 2, |
|
857 3, 1, 2, 1, 2, 5, 3, 1, 1, 4, |
|
858 0, 6, 0, 8, 0, 7, 1, 1, 1, 0, |
|
859 2, 3, 2, 2, 2, 3, 2, 1, 2, 1, |
|
860 1, 0, 3 |
|
861 }; |
|
862 |
|
863 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. |
|
864 Performed when YYTABLE doesn't specify something else to do. Zero |
|
865 means the default is an error. */ |
|
866 static const yytype_uint8 yydefact[] = |
|
867 { |
|
868 0, 0, 112, 113, 114, 0, 106, 105, 120, 118, |
|
869 119, 124, 125, 126, 127, 128, 129, 121, 122, 123, |
|
870 130, 131, 132, 109, 107, 0, 117, 133, 134, 135, |
|
871 136, 138, 200, 201, 0, 77, 87, 0, 92, 97, |
|
872 0, 103, 0, 110, 115, 137, 0, 197, 199, 108, |
|
873 102, 0, 2, 3, 141, 0, 72, 0, 75, 87, |
|
874 0, 88, 89, 90, 78, 0, 87, 0, 73, 2, |
|
875 98, 104, 111, 0, 1, 198, 0, 0, 139, 0, |
|
876 202, 79, 84, 86, 91, 0, 93, 80, 0, 0, |
|
877 4, 7, 6, 8, 0, 0, 0, 35, 34, 33, |
|
878 5, 10, 29, 12, 17, 18, 0, 0, 23, 0, |
|
879 36, 0, 39, 42, 43, 48, 51, 52, 53, 54, |
|
880 56, 58, 60, 71, 0, 27, 74, 0, 0, 143, |
|
881 0, 0, 0, 182, 0, 0, 0, 0, 0, 160, |
|
882 169, 173, 36, 62, 69, 0, 151, 0, 115, 154, |
|
883 171, 153, 152, 0, 155, 156, 157, 158, 81, 83, |
|
884 85, 0, 0, 99, 0, 150, 101, 30, 31, 0, |
|
885 14, 15, 0, 0, 21, 20, 0, 22, 24, 26, |
|
886 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
887 0, 0, 0, 0, 0, 116, 148, 0, 146, 142, |
|
888 144, 0, 193, 192, 167, 184, 0, 196, 194, 0, |
|
889 180, 159, 0, 65, 66, 67, 68, 64, 0, 0, |
|
890 174, 170, 172, 0, 94, 0, 96, 100, 9, 0, |
|
891 16, 2, 3, 13, 19, 25, 37, 38, 41, 40, |
|
892 46, 47, 44, 45, 49, 50, 55, 57, 59, 0, |
|
893 0, 0, 145, 140, 0, 0, 0, 0, 0, 195, |
|
894 0, 161, 63, 70, 0, 95, 11, 0, 0, 147, |
|
895 0, 166, 168, 187, 186, 189, 167, 178, 0, 0, |
|
896 0, 82, 61, 149, 0, 188, 0, 0, 177, 175, |
|
897 0, 0, 162, 0, 190, 0, 167, 0, 164, 181, |
|
898 163, 0, 191, 185, 176, 179, 183 |
|
899 }; |
|
900 |
|
901 /* YYDEFGOTO[NTERM-NUM]. */ |
|
902 static const yytype_int16 yydefgoto[] = |
|
903 { |
|
904 -1, 196, 100, 101, 102, 229, 103, 104, 105, 106, |
|
905 107, 108, 109, 142, 111, 112, 113, 114, 115, 116, |
|
906 117, 118, 119, 120, 121, 122, 143, 144, 218, 145, |
|
907 124, 146, 147, 34, 35, 36, 82, 64, 65, 83, |
|
908 37, 38, 39, 40, 41, 42, 43, 125, 45, 130, |
|
909 77, 128, 129, 197, 198, 166, 149, 150, 151, 152, |
|
910 212, 280, 299, 254, 255, 256, 300, 153, 154, 155, |
|
911 289, 279, 156, 260, 204, 257, 275, 286, 287, 157, |
|
912 46, 47, 48, 57 |
|
913 }; |
|
914 |
|
915 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing |
|
916 STATE-NUM. */ |
|
917 #define YYPACT_NINF -261 |
|
918 static const yytype_int16 yypact[] = |
|
919 { |
|
920 1327, -20, -261, -261, -261, 113, -261, -261, -261, -261, |
|
921 -261, -261, -261, -261, -261, -261, -261, -261, -261, -261, |
|
922 -261, -261, -261, -261, -261, -19, -261, -261, -261, -261, |
|
923 -261, -261, -261, -61, -40, -28, 75, -7, -261, 24, |
|
924 1370, -261, 1444, -261, -11, -261, 1283, -261, -261, -261, |
|
925 -261, 1444, -261, -261, -261, 6, -261, 54, -261, 88, |
|
926 62, -261, -261, -261, -261, 1370, 59, 91, -261, 36, |
|
927 -50, -261, -261, 1051, -261, -261, 63, 1370, -261, 293, |
|
928 -261, -261, -261, -261, 91, 1370, -12, -261, 856, 1051, |
|
929 77, -261, -261, -261, 1051, 1051, 1051, -261, -261, -261, |
|
930 -261, -261, -14, -261, -261, -261, 84, -44, 1116, 95, |
|
931 -261, 1051, 53, 3, -261, -36, 89, -261, -261, -261, |
|
932 104, 107, -45, -261, 96, -261, -261, 91, 1184, -261, |
|
933 1370, 92, 93, -261, 98, 101, 94, 921, 105, 102, |
|
934 -261, -261, 72, -261, -261, 9, -261, -61, 42, -261, |
|
935 -261, -261, -261, 376, -261, -261, -261, -261, 106, -261, |
|
936 -261, 986, 1051, -261, 103, -261, -261, -261, -261, -41, |
|
937 -261, -261, 1051, 1407, -261, -261, 1051, 110, -261, -261, |
|
938 -261, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, 1051, |
|
939 1051, 1051, 1051, 1051, 1051, -261, 109, 23, -261, -261, |
|
940 -261, 1227, -261, -261, 111, -261, 1051, -261, -261, 25, |
|
941 -261, -261, 459, -261, -261, -261, -261, -261, 1051, 1051, |
|
942 -261, -261, -261, 1051, -261, 114, -261, -261, -261, 115, |
|
943 112, 77, 116, -261, -261, -261, -261, -261, 53, 53, |
|
944 -261, -261, -261, -261, -36, -36, -261, 104, 107, 76, |
|
945 1051, 91, -261, -261, 145, 54, 625, 708, -6, -261, |
|
946 791, 459, -261, -261, 117, -261, -261, 1051, 120, -261, |
|
947 124, -261, -261, -261, -261, 791, 111, 112, 91, 125, |
|
948 122, -261, -261, -261, 1051, -261, 118, 128, 180, -261, |
|
949 126, 542, -261, -5, 1051, 542, 111, 1051, -261, -261, |
|
950 -261, 123, 112, -261, -261, -261, -261 |
|
951 }; |
|
952 |
|
953 /* YYPGOTO[NTERM-NUM]. */ |
|
954 static const yytype_int16 yypgoto[] = |
|
955 { |
|
956 -261, -24, -261, -261, -261, -261, -261, -261, 34, -261, |
|
957 -261, -261, -261, 32, -261, -33, -261, -27, -26, -261, |
|
958 -261, -261, 14, 16, 18, -261, -66, -87, -261, -92, |
|
959 -85, 11, 12, -261, -261, -261, 141, 150, 161, 143, |
|
960 -261, -261, -231, 5, -30, 224, -18, 0, -261, -261, |
|
961 -261, 100, -119, -261, -17, -156, -25, -145, -243, -261, |
|
962 -261, -261, -64, -260, -261, -261, -52, 21, -22, -261, |
|
963 -261, -39, -261, -261, -261, -261, -261, -261, -261, -261, |
|
964 -261, 191, -261, -261 |
|
965 }; |
|
966 |
|
967 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If |
|
968 positive, shift that token. If negative, reduce the rule which |
|
969 number is the opposite. If YYTABLE_NINF, syntax error. */ |
|
970 #define YYTABLE_NINF -166 |
|
971 static const yytype_int16 yytable[] = |
|
972 { |
|
973 44, 55, 165, 164, 169, 80, 226, 123, 222, 200, |
|
974 71, 32, 33, 272, 193, 70, 288, 49, 185, 186, |
|
975 56, 178, 123, 88, 72, 50, 52, 53, 175, 278, |
|
976 89, 228, 58, 76, 176, 84, 304, 219, 170, 171, |
|
977 44, 66, 44, 86, 278, 209, 44, 127, 298, 194, |
|
978 59, 44, 298, 187, 188, 84, 54, 32, 33, 172, |
|
979 158, 161, 73, 173, 66, 44, 276, 301, 162, 69, |
|
980 53, 67, 219, 219, 68, 165, 225, 44, 60, 148, |
|
981 230, 78, 200, 6, 7, 44, 183, 219, 184, 235, |
|
982 220, 60, 61, 62, 63, 123, 6, 7, 127, 49, |
|
983 127, 251, 249, 219, 252, 110, 259, 87, 61, 62, |
|
984 63, 23, 24, -27, 258, 73, 222, 2, 3, 4, |
|
985 110, 61, 62, 63, 23, 24, 167, 168, 44, 79, |
|
986 44, 262, 263, 213, 214, 215, 52, 53, 264, 181, |
|
987 182, 305, 216, 180, 126, 189, 190, -76, -28, 233, |
|
988 238, 239, 217, 148, 219, 267, 174, 123, 240, 241, |
|
989 242, 243, 191, 244, 245, 268, 179, 192, 277, 205, |
|
990 195, 127, 206, 202, 203, 207, 210, 227, 211, 223, |
|
991 282, -117, 250, 277, 123, 270, -165, -138, 265, 266, |
|
992 219, 281, 293, 110, 283, 284, 296, 291, 292, 294, |
|
993 295, 44, 302, 271, 306, 246, 297, 234, 247, 81, |
|
994 165, 248, 148, 236, 237, 110, 110, 110, 110, 110, |
|
995 110, 110, 110, 110, 110, 110, 159, 85, 160, 51, |
|
996 201, 303, 273, 261, 269, 274, 285, 75, 0, 0, |
|
997 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
998 0, 0, 0, 0, 290, 110, 148, 148, 0, 0, |
|
999 148, 148, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1000 0, 0, 0, 0, 0, 148, 0, 0, 0, 0, |
|
1001 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, |
|
1002 0, 148, 0, 0, 0, 148, 1, 2, 3, 4, |
|
1003 5, 6, 7, 8, 9, 10, 131, 132, 133, 0, |
|
1004 134, 135, 136, 137, 11, 12, 13, 14, 15, 16, |
|
1005 17, 18, 19, 20, 21, 22, 0, 0, 0, 23, |
|
1006 24, 25, 26, 138, 27, 28, 29, 30, 90, 31, |
|
1007 91, 92, 93, 0, 0, 94, 95, 0, 0, 0, |
|
1008 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1009 0, 0, 0, 0, 96, 0, 0, 0, 139, 140, |
|
1010 0, 0, 0, 0, 141, 97, 98, 0, 99, 1, |
|
1011 2, 3, 4, 5, 6, 7, 8, 9, 10, 131, |
|
1012 132, 133, 0, 134, 135, 136, 137, 11, 12, 13, |
|
1013 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, |
|
1014 0, 0, 23, 24, 25, 26, 138, 27, 28, 29, |
|
1015 30, 90, 31, 91, 92, 93, 0, 0, 94, 95, |
|
1016 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1017 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, |
|
1018 0, 139, 221, 0, 0, 0, 0, 141, 97, 98, |
|
1019 0, 99, 1, 2, 3, 4, 5, 6, 7, 8, |
|
1020 9, 10, 131, 132, 133, 0, 134, 135, 136, 137, |
|
1021 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, |
|
1022 21, 22, 0, 0, 0, 23, 24, 25, 26, 138, |
|
1023 27, 28, 29, 30, 90, 31, 91, 92, 93, 0, |
|
1024 0, 94, 95, 0, 0, 0, 0, 0, 0, 0, |
|
1025 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1026 96, 0, 0, 0, 139, 0, 0, 0, 0, 0, |
|
1027 141, 97, 98, 0, 99, 1, 2, 3, 4, 5, |
|
1028 6, 7, 8, 9, 10, 131, 132, 133, 0, 134, |
|
1029 135, 136, 137, 11, 12, 13, 14, 15, 16, 17, |
|
1030 18, 19, 20, 21, 22, 0, 0, 0, 23, 24, |
|
1031 25, 26, 138, 27, 28, 29, 30, 90, 31, 91, |
|
1032 92, 93, 0, 0, 94, 95, 0, 0, 0, 0, |
|
1033 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1034 0, 0, 0, 96, 0, 0, 0, 79, 0, 0, |
|
1035 0, 0, 0, 141, 97, 98, 0, 99, 1, 2, |
|
1036 3, 4, 5, 6, 7, 8, 9, 10, 131, 132, |
|
1037 133, 0, 134, 135, 136, 137, 11, 12, 13, 14, |
|
1038 15, 16, 17, 18, 19, 20, 21, 22, 0, 0, |
|
1039 0, 23, 24, 25, 26, 138, 27, 28, 29, 30, |
|
1040 90, 31, 91, 92, 93, 0, 0, 94, 95, 0, |
|
1041 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1042 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, |
|
1043 0, 0, 0, 0, 0, 0, 141, 97, 98, 0, |
|
1044 99, 1, 2, 3, 4, 5, 6, 7, 8, 9, |
|
1045 10, 0, 0, 0, 0, 0, 0, 0, 0, 11, |
|
1046 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, |
|
1047 22, 0, 0, 0, 23, 24, 25, 26, 0, 27, |
|
1048 28, 29, 30, 90, 31, 91, 92, 93, 0, 0, |
|
1049 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1050 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, |
|
1051 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, |
|
1052 97, 98, 0, 99, 60, 2, 3, 4, 0, 6, |
|
1053 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, |
|
1054 0, 0, 11, 12, 13, 14, 15, 16, 17, 18, |
|
1055 19, 20, 21, 22, 0, 0, 0, 23, 24, 25, |
|
1056 26, 0, 27, 28, 29, 30, 90, 31, 91, 92, |
|
1057 93, 0, 0, 94, 95, 0, 0, 0, 0, 0, |
|
1058 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1059 0, 0, 96, 0, 0, 0, 8, 9, 10, 0, |
|
1060 0, 0, 0, 97, 98, 0, 99, 11, 12, 13, |
|
1061 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, |
|
1062 0, 0, 0, 0, 25, 26, 0, 27, 28, 29, |
|
1063 30, 90, 31, 91, 92, 93, 0, 0, 94, 95, |
|
1064 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1065 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, |
|
1066 163, 8, 9, 10, 0, 0, 0, 0, 97, 98, |
|
1067 0, 99, 11, 12, 13, 14, 15, 16, 17, 18, |
|
1068 19, 20, 21, 22, 0, 0, 0, 0, 0, 25, |
|
1069 26, 0, 27, 28, 29, 30, 90, 31, 91, 92, |
|
1070 93, 0, 0, 94, 95, 0, 0, 0, 0, 0, |
|
1071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1072 0, 0, 96, 0, 0, 0, 8, 9, 10, 0, |
|
1073 0, 0, 208, 97, 98, 0, 99, 11, 12, 13, |
|
1074 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, |
|
1075 0, 0, 0, 0, 25, 26, 0, 27, 28, 29, |
|
1076 30, 90, 31, 91, 92, 93, 0, 0, 94, 95, |
|
1077 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1078 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, |
|
1079 224, 8, 9, 10, 0, 0, 0, 0, 97, 98, |
|
1080 0, 99, 11, 12, 13, 14, 15, 16, 17, 18, |
|
1081 19, 20, 21, 22, 0, 0, 0, 0, 0, 25, |
|
1082 26, 0, 27, 28, 29, 30, 90, 31, 91, 92, |
|
1083 93, 0, 0, 94, 95, 0, 0, 0, 0, 0, |
|
1084 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1085 0, 0, 96, 0, 0, 0, 8, 9, 10, 0, |
|
1086 0, 0, 0, 97, 98, 0, 99, 11, 12, 13, |
|
1087 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, |
|
1088 0, 0, 0, 0, 25, 177, 0, 27, 28, 29, |
|
1089 30, 90, 31, 91, 92, 93, 0, 0, 94, 95, |
|
1090 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
|
1091 0, 0, 0, 0, 0, 0, 0, 96, 2, 3, |
|
1092 4, 0, 0, 0, 8, 9, 10, 0, 97, 98, |
|
1093 0, 99, 0, 0, 0, 11, 12, 13, 14, 15, |
|
1094 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, |
|
1095 0, 0, 25, 26, 0, 27, 28, 29, 30, 0, |
|
1096 31, 2, 3, 4, 0, 0, 0, 8, 9, 10, |
|
1097 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, |
|
1098 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, |
|
1099 199, 0, 0, 0, 0, 25, 26, 0, 27, 28, |
|
1100 29, 30, 0, 31, 0, 0, 0, 0, 0, 0, |
|
1101 0, 0, 0, 74, 0, 0, 1, 2, 3, 4, |
|
1102 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, |
|
1103 0, 0, 0, 253, 11, 12, 13, 14, 15, 16, |
|
1104 17, 18, 19, 20, 21, 22, 0, 0, 0, 23, |
|
1105 24, 25, 26, 0, 27, 28, 29, 30, 0, 31, |
|
1106 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, |
|
1107 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, |
|
1108 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, |
|
1109 0, 0, 0, 23, 24, 25, 26, 0, 27, 28, |
|
1110 29, 30, 0, 31, 2, 3, 4, 0, 0, 0, |
|
1111 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, |
|
1112 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, |
|
1113 20, 21, 22, 0, 0, 0, 0, 0, 25, 26, |
|
1114 0, 27, 28, 29, 30, 0, 31, 8, 9, 10, |
|
1115 0, 0, 0, 0, 0, 0, 0, 0, 11, 12, |
|
1116 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, |
|
1117 0, 0, 0, 0, 0, 25, 26, 0, 27, 28, |
|
1118 29, 30, 231, 232, 8, 9, 10, 0, 0, 0, |
|
1119 0, 0, 0, 0, 0, 11, 12, 13, 14, 15, |
|
1120 16, 17, 18, 19, 20, 21, 22, 0, 0, 0, |
|
1121 0, 0, 25, 26, 0, 27, 28, 29, 30, 0, |
|
1122 31 |
|
1123 }; |
|
1124 |
|
1125 #define yypact_value_is_default(Yystate) \ |
|
1126 (!!((Yystate) == (-261))) |
|
1127 |
|
1128 #define yytable_value_is_error(Yytable_value) \ |
|
1129 YYID (0) |
|
1130 |
|
1131 static const yytype_int16 yycheck[] = |
|
1132 { |
|
1133 0, 25, 89, 88, 96, 57, 162, 73, 153, 128, |
|
1134 40, 0, 0, 256, 59, 39, 276, 37, 54, 55, |
|
1135 81, 108, 88, 73, 42, 45, 45, 46, 72, 260, |
|
1136 80, 72, 72, 51, 78, 65, 296, 78, 52, 53, |
|
1137 40, 36, 42, 67, 275, 137, 46, 77, 291, 94, |
|
1138 78, 51, 295, 89, 90, 85, 75, 46, 46, 73, |
|
1139 84, 73, 73, 77, 59, 65, 72, 72, 80, 45, |
|
1140 46, 78, 78, 78, 81, 162, 161, 77, 3, 79, |
|
1141 172, 75, 201, 8, 9, 85, 83, 78, 85, 176, |
|
1142 81, 3, 33, 34, 35, 161, 8, 9, 128, 37, |
|
1143 130, 78, 194, 78, 81, 73, 81, 71, 33, 34, |
|
1144 35, 36, 37, 71, 206, 73, 261, 4, 5, 6, |
|
1145 88, 33, 34, 35, 36, 37, 94, 95, 128, 75, |
|
1146 130, 218, 219, 61, 62, 63, 45, 46, 223, 86, |
|
1147 87, 297, 70, 111, 81, 56, 57, 72, 71, 173, |
|
1148 183, 184, 80, 153, 78, 79, 72, 223, 185, 186, |
|
1149 187, 188, 58, 189, 190, 250, 71, 60, 260, 71, |
|
1150 74, 201, 71, 81, 81, 81, 71, 74, 76, 73, |
|
1151 267, 71, 73, 275, 250, 40, 75, 71, 74, 74, |
|
1152 78, 74, 284, 161, 74, 71, 16, 72, 76, 81, |
|
1153 72, 201, 294, 255, 81, 191, 80, 173, 192, 59, |
|
1154 297, 193, 212, 181, 182, 183, 184, 185, 186, 187, |
|
1155 188, 189, 190, 191, 192, 193, 85, 66, 85, 5, |
|
1156 130, 295, 257, 212, 251, 257, 275, 46, -1, -1, |
|
1157 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1158 -1, -1, -1, -1, 278, 223, 256, 257, -1, -1, |
|
1159 260, 261, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1160 -1, -1, -1, -1, -1, 275, -1, -1, -1, -1, |
|
1161 -1, -1, 250, -1, -1, -1, -1, -1, -1, -1, |
|
1162 -1, 291, -1, -1, -1, 295, 3, 4, 5, 6, |
|
1163 7, 8, 9, 10, 11, 12, 13, 14, 15, -1, |
|
1164 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, |
|
1165 27, 28, 29, 30, 31, 32, -1, -1, -1, 36, |
|
1166 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, |
|
1167 47, 48, 49, -1, -1, 52, 53, -1, -1, -1, |
|
1168 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1169 -1, -1, -1, -1, 71, -1, -1, -1, 75, 76, |
|
1170 -1, -1, -1, -1, 81, 82, 83, -1, 85, 3, |
|
1171 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, |
|
1172 14, 15, -1, 17, 18, 19, 20, 21, 22, 23, |
|
1173 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, |
|
1174 -1, -1, 36, 37, 38, 39, 40, 41, 42, 43, |
|
1175 44, 45, 46, 47, 48, 49, -1, -1, 52, 53, |
|
1176 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1177 -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, |
|
1178 -1, 75, 76, -1, -1, -1, -1, 81, 82, 83, |
|
1179 -1, 85, 3, 4, 5, 6, 7, 8, 9, 10, |
|
1180 11, 12, 13, 14, 15, -1, 17, 18, 19, 20, |
|
1181 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, |
|
1182 31, 32, -1, -1, -1, 36, 37, 38, 39, 40, |
|
1183 41, 42, 43, 44, 45, 46, 47, 48, 49, -1, |
|
1184 -1, 52, 53, -1, -1, -1, -1, -1, -1, -1, |
|
1185 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1186 71, -1, -1, -1, 75, -1, -1, -1, -1, -1, |
|
1187 81, 82, 83, -1, 85, 3, 4, 5, 6, 7, |
|
1188 8, 9, 10, 11, 12, 13, 14, 15, -1, 17, |
|
1189 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, |
|
1190 28, 29, 30, 31, 32, -1, -1, -1, 36, 37, |
|
1191 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, |
|
1192 48, 49, -1, -1, 52, 53, -1, -1, -1, -1, |
|
1193 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1194 -1, -1, -1, 71, -1, -1, -1, 75, -1, -1, |
|
1195 -1, -1, -1, 81, 82, 83, -1, 85, 3, 4, |
|
1196 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, |
|
1197 15, -1, 17, 18, 19, 20, 21, 22, 23, 24, |
|
1198 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, |
|
1199 -1, 36, 37, 38, 39, 40, 41, 42, 43, 44, |
|
1200 45, 46, 47, 48, 49, -1, -1, 52, 53, -1, |
|
1201 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1202 -1, -1, -1, -1, -1, -1, 71, -1, -1, -1, |
|
1203 -1, -1, -1, -1, -1, -1, 81, 82, 83, -1, |
|
1204 85, 3, 4, 5, 6, 7, 8, 9, 10, 11, |
|
1205 12, -1, -1, -1, -1, -1, -1, -1, -1, 21, |
|
1206 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, |
|
1207 32, -1, -1, -1, 36, 37, 38, 39, -1, 41, |
|
1208 42, 43, 44, 45, 46, 47, 48, 49, -1, -1, |
|
1209 52, 53, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1210 -1, -1, -1, -1, -1, -1, -1, -1, -1, 71, |
|
1211 -1, -1, -1, -1, -1, -1, -1, -1, -1, 81, |
|
1212 82, 83, -1, 85, 3, 4, 5, 6, -1, 8, |
|
1213 9, 10, 11, 12, -1, -1, -1, -1, -1, -1, |
|
1214 -1, -1, 21, 22, 23, 24, 25, 26, 27, 28, |
|
1215 29, 30, 31, 32, -1, -1, -1, 36, 37, 38, |
|
1216 39, -1, 41, 42, 43, 44, 45, 46, 47, 48, |
|
1217 49, -1, -1, 52, 53, -1, -1, -1, -1, -1, |
|
1218 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1219 -1, -1, 71, -1, -1, -1, 10, 11, 12, -1, |
|
1220 -1, -1, -1, 82, 83, -1, 85, 21, 22, 23, |
|
1221 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, |
|
1222 -1, -1, -1, -1, 38, 39, -1, 41, 42, 43, |
|
1223 44, 45, 46, 47, 48, 49, -1, -1, 52, 53, |
|
1224 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1225 -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, |
|
1226 74, 10, 11, 12, -1, -1, -1, -1, 82, 83, |
|
1227 -1, 85, 21, 22, 23, 24, 25, 26, 27, 28, |
|
1228 29, 30, 31, 32, -1, -1, -1, -1, -1, 38, |
|
1229 39, -1, 41, 42, 43, 44, 45, 46, 47, 48, |
|
1230 49, -1, -1, 52, 53, -1, -1, -1, -1, -1, |
|
1231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1232 -1, -1, 71, -1, -1, -1, 10, 11, 12, -1, |
|
1233 -1, -1, 81, 82, 83, -1, 85, 21, 22, 23, |
|
1234 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, |
|
1235 -1, -1, -1, -1, 38, 39, -1, 41, 42, 43, |
|
1236 44, 45, 46, 47, 48, 49, -1, -1, 52, 53, |
|
1237 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1238 -1, -1, -1, -1, -1, -1, -1, 71, -1, -1, |
|
1239 74, 10, 11, 12, -1, -1, -1, -1, 82, 83, |
|
1240 -1, 85, 21, 22, 23, 24, 25, 26, 27, 28, |
|
1241 29, 30, 31, 32, -1, -1, -1, -1, -1, 38, |
|
1242 39, -1, 41, 42, 43, 44, 45, 46, 47, 48, |
|
1243 49, -1, -1, 52, 53, -1, -1, -1, -1, -1, |
|
1244 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1245 -1, -1, 71, -1, -1, -1, 10, 11, 12, -1, |
|
1246 -1, -1, -1, 82, 83, -1, 85, 21, 22, 23, |
|
1247 24, 25, 26, 27, 28, 29, 30, 31, 32, -1, |
|
1248 -1, -1, -1, -1, 38, 39, -1, 41, 42, 43, |
|
1249 44, 45, 46, 47, 48, 49, -1, -1, 52, 53, |
|
1250 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, |
|
1251 -1, -1, -1, -1, -1, -1, -1, 71, 4, 5, |
|
1252 6, -1, -1, -1, 10, 11, 12, -1, 82, 83, |
|
1253 -1, 85, -1, -1, -1, 21, 22, 23, 24, 25, |
|
1254 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, |
|
1255 -1, -1, 38, 39, -1, 41, 42, 43, 44, -1, |
|
1256 46, 4, 5, 6, -1, -1, -1, 10, 11, 12, |
|
1257 -1, -1, -1, -1, -1, -1, -1, -1, 21, 22, |
|
1258 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, |
|
1259 76, -1, -1, -1, -1, 38, 39, -1, 41, 42, |
|
1260 43, 44, -1, 46, -1, -1, -1, -1, -1, -1, |
|
1261 -1, -1, -1, 0, -1, -1, 3, 4, 5, 6, |
|
1262 7, 8, 9, 10, 11, 12, -1, -1, -1, -1, |
|
1263 -1, -1, -1, 76, 21, 22, 23, 24, 25, 26, |
|
1264 27, 28, 29, 30, 31, 32, -1, -1, -1, 36, |
|
1265 37, 38, 39, -1, 41, 42, 43, 44, -1, 46, |
|
1266 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, |
|
1267 -1, -1, -1, -1, -1, -1, -1, -1, 21, 22, |
|
1268 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, |
|
1269 -1, -1, -1, 36, 37, 38, 39, -1, 41, 42, |
|
1270 43, 44, -1, 46, 4, 5, 6, -1, -1, -1, |
|
1271 10, 11, 12, -1, -1, -1, -1, -1, -1, -1, |
|
1272 -1, 21, 22, 23, 24, 25, 26, 27, 28, 29, |
|
1273 30, 31, 32, -1, -1, -1, -1, -1, 38, 39, |
|
1274 -1, 41, 42, 43, 44, -1, 46, 10, 11, 12, |
|
1275 -1, -1, -1, -1, -1, -1, -1, -1, 21, 22, |
|
1276 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, |
|
1277 -1, -1, -1, -1, -1, 38, 39, -1, 41, 42, |
|
1278 43, 44, 45, 46, 10, 11, 12, -1, -1, -1, |
|
1279 -1, -1, -1, -1, -1, 21, 22, 23, 24, 25, |
|
1280 26, 27, 28, 29, 30, 31, 32, -1, -1, -1, |
|
1281 -1, -1, 38, 39, -1, 41, 42, 43, 44, -1, |
|
1282 46 |
|
1283 }; |
|
1284 |
|
1285 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing |
|
1286 symbol of state STATE-NUM. */ |
|
1287 static const yytype_uint8 yystos[] = |
|
1288 { |
|
1289 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, |
|
1290 12, 21, 22, 23, 24, 25, 26, 27, 28, 29, |
|
1291 30, 31, 32, 36, 37, 38, 39, 41, 42, 43, |
|
1292 44, 46, 126, 127, 128, 129, 130, 135, 136, 137, |
|
1293 138, 139, 140, 141, 142, 143, 175, 176, 177, 37, |
|
1294 45, 140, 45, 46, 75, 96, 81, 178, 72, 78, |
|
1295 3, 33, 34, 35, 132, 133, 138, 78, 81, 45, |
|
1296 96, 139, 141, 73, 0, 176, 141, 145, 75, 75, |
|
1297 161, 132, 131, 134, 139, 133, 96, 71, 73, 80, |
|
1298 45, 47, 48, 49, 52, 53, 71, 82, 83, 85, |
|
1299 97, 98, 99, 101, 102, 103, 104, 105, 106, 107, |
|
1300 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, |
|
1301 118, 119, 120, 121, 125, 142, 81, 139, 146, 147, |
|
1302 144, 13, 14, 15, 17, 18, 19, 20, 40, 75, |
|
1303 76, 81, 108, 121, 122, 124, 126, 127, 142, 151, |
|
1304 152, 153, 154, 162, 163, 164, 167, 174, 96, 131, |
|
1305 134, 73, 80, 74, 125, 122, 150, 108, 108, 124, |
|
1306 52, 53, 73, 77, 72, 72, 78, 39, 122, 71, |
|
1307 108, 86, 87, 83, 85, 54, 55, 89, 90, 56, |
|
1308 57, 58, 60, 59, 94, 74, 96, 148, 149, 76, |
|
1309 147, 146, 81, 81, 169, 71, 71, 81, 81, 124, |
|
1310 71, 76, 155, 61, 62, 63, 70, 80, 123, 78, |
|
1311 81, 76, 152, 73, 74, 125, 150, 74, 72, 100, |
|
1312 124, 45, 46, 96, 103, 122, 108, 108, 110, 110, |
|
1313 112, 112, 112, 112, 113, 113, 117, 118, 119, 124, |
|
1314 73, 78, 81, 76, 158, 159, 160, 170, 124, 81, |
|
1315 168, 162, 122, 122, 125, 74, 74, 79, 125, 149, |
|
1316 40, 161, 153, 151, 163, 171, 72, 124, 137, 166, |
|
1317 156, 74, 122, 74, 71, 166, 172, 173, 158, 165, |
|
1318 96, 72, 76, 124, 81, 72, 16, 80, 153, 157, |
|
1319 161, 72, 124, 157, 158, 150, 81 |
|
1320 }; |
|
1321 |
|
1322 #define yyerrok (yyerrstatus = 0) |
|
1323 #define yyclearin (yychar = YYEMPTY) |
|
1324 #define YYEMPTY (-2) |
|
1325 #define YYEOF 0 |
|
1326 |
|
1327 #define YYACCEPT goto yyacceptlab |
|
1328 #define YYABORT goto yyabortlab |
|
1329 #define YYERROR goto yyerrorlab |
|
1330 |
|
1331 |
|
1332 /* Like YYERROR except do call yyerror. This remains here temporarily |
|
1333 to ease the transition to the new meaning of YYERROR, for GCC. |
|
1334 Once GCC version 2 has supplanted version 1, this can go. However, |
|
1335 YYFAIL appears to be in use. Nevertheless, it is formally deprecated |
|
1336 in Bison 2.4.2's NEWS entry, where a plan to phase it out is |
|
1337 discussed. */ |
|
1338 |
|
1339 #define YYFAIL goto yyerrlab |
|
1340 #if defined YYFAIL |
|
1341 /* This is here to suppress warnings from the GCC cpp's |
|
1342 -Wunused-macros. Normally we don't worry about that warning, but |
|
1343 some users do, and we want to make it easy for users to remove |
|
1344 YYFAIL uses, which will produce warnings from Bison 2.5. */ |
|
1345 #endif |
|
1346 |
|
1347 #define YYRECOVERING() (!!yyerrstatus) |
|
1348 |
|
1349 #define YYBACKUP(Token, Value) \ |
|
1350 do \ |
|
1351 if (yychar == YYEMPTY) \ |
|
1352 { \ |
|
1353 yychar = (Token); \ |
|
1354 yylval = (Value); \ |
|
1355 YYPOPSTACK (yylen); \ |
|
1356 yystate = *yyssp; \ |
|
1357 goto yybackup; \ |
|
1358 } \ |
|
1359 else \ |
|
1360 { \ |
|
1361 yyerror (&yylloc, context, YY_("syntax error: cannot back up")); \ |
|
1362 YYERROR; \ |
|
1363 } \ |
|
1364 while (YYID (0)) |
|
1365 |
|
1366 /* Error token number */ |
|
1367 #define YYTERROR 1 |
|
1368 #define YYERRCODE 256 |
|
1369 |
|
1370 |
|
1371 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. |
|
1372 If N is 0, then set CURRENT to the empty location which ends |
|
1373 the previous symbol: RHS[0] (always defined). */ |
|
1374 |
|
1375 #ifndef YYLLOC_DEFAULT |
|
1376 # define YYLLOC_DEFAULT(Current, Rhs, N) \ |
|
1377 do \ |
|
1378 if (YYID (N)) \ |
|
1379 { \ |
|
1380 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ |
|
1381 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ |
|
1382 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ |
|
1383 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ |
|
1384 } \ |
|
1385 else \ |
|
1386 { \ |
|
1387 (Current).first_line = (Current).last_line = \ |
|
1388 YYRHSLOC (Rhs, 0).last_line; \ |
|
1389 (Current).first_column = (Current).last_column = \ |
|
1390 YYRHSLOC (Rhs, 0).last_column; \ |
|
1391 } \ |
|
1392 while (YYID (0)) |
|
1393 #endif |
|
1394 |
|
1395 #define YYRHSLOC(Rhs, K) ((Rhs)[K]) |
|
1396 |
|
1397 |
|
1398 /* YY_LOCATION_PRINT -- Print the location on the stream. |
|
1399 This macro was not mandated originally: define only if we know |
|
1400 we won't break user code: when these are the locations we know. */ |
|
1401 |
|
1402 #ifndef YY_LOCATION_PRINT |
|
1403 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL |
|
1404 |
|
1405 /* Print *YYLOCP on YYO. Private, do not rely on its existence. */ |
|
1406 |
|
1407 __attribute__((__unused__)) |
|
1408 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1409 || defined __cplusplus || defined _MSC_VER) |
|
1410 static unsigned |
|
1411 yy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) |
|
1412 #else |
|
1413 static unsigned |
|
1414 yy_location_print_ (yyo, yylocp) |
|
1415 FILE *yyo; |
|
1416 YYLTYPE const * const yylocp; |
|
1417 #endif |
|
1418 { |
|
1419 unsigned res = 0; |
|
1420 int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; |
|
1421 if (0 <= yylocp->first_line) |
|
1422 { |
|
1423 res += fprintf (yyo, "%d", yylocp->first_line); |
|
1424 if (0 <= yylocp->first_column) |
|
1425 res += fprintf (yyo, ".%d", yylocp->first_column); |
|
1426 } |
|
1427 if (0 <= yylocp->last_line) |
|
1428 { |
|
1429 if (yylocp->first_line < yylocp->last_line) |
|
1430 { |
|
1431 res += fprintf (yyo, "-%d", yylocp->last_line); |
|
1432 if (0 <= end_col) |
|
1433 res += fprintf (yyo, ".%d", end_col); |
|
1434 } |
|
1435 else if (0 <= end_col && yylocp->first_column < end_col) |
|
1436 res += fprintf (yyo, "-%d", end_col); |
|
1437 } |
|
1438 return res; |
|
1439 } |
|
1440 |
|
1441 # define YY_LOCATION_PRINT(File, Loc) \ |
|
1442 yy_location_print_ (File, &(Loc)) |
|
1443 |
|
1444 # else |
|
1445 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) |
|
1446 # endif |
|
1447 #endif |
|
1448 |
|
1449 |
|
1450 /* YYLEX -- calling `yylex' with the right arguments. */ |
|
1451 #ifdef YYLEX_PARAM |
|
1452 # define YYLEX yylex (&yylval, &yylloc, YYLEX_PARAM) |
|
1453 #else |
|
1454 # define YYLEX yylex (&yylval, &yylloc) |
|
1455 #endif |
|
1456 |
|
1457 /* Enable debugging if requested. */ |
|
1458 #if YYDEBUG |
|
1459 |
|
1460 # ifndef YYFPRINTF |
|
1461 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ |
|
1462 # define YYFPRINTF fprintf |
|
1463 # endif |
|
1464 |
|
1465 # define YYDPRINTF(Args) \ |
|
1466 do { \ |
|
1467 if (yydebug) \ |
|
1468 YYFPRINTF Args; \ |
|
1469 } while (YYID (0)) |
|
1470 |
|
1471 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ |
|
1472 do { \ |
|
1473 if (yydebug) \ |
|
1474 { \ |
|
1475 YYFPRINTF (stderr, "%s ", Title); \ |
|
1476 yy_symbol_print (stderr, \ |
|
1477 Type, Value, Location, context); \ |
|
1478 YYFPRINTF (stderr, "\n"); \ |
|
1479 } \ |
|
1480 } while (YYID (0)) |
|
1481 |
|
1482 |
|
1483 /*--------------------------------. |
|
1484 | Print this symbol on YYOUTPUT. | |
|
1485 `--------------------------------*/ |
|
1486 |
|
1487 /*ARGSUSED*/ |
|
1488 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1489 || defined __cplusplus || defined _MSC_VER) |
|
1490 static void |
|
1491 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, TParseContext* context) |
|
1492 #else |
|
1493 static void |
|
1494 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, context) |
|
1495 FILE *yyoutput; |
|
1496 int yytype; |
|
1497 YYSTYPE const * const yyvaluep; |
|
1498 YYLTYPE const * const yylocationp; |
|
1499 TParseContext* context; |
|
1500 #endif |
|
1501 { |
|
1502 FILE *yyo = yyoutput; |
|
1503 YYUSE (yyo); |
|
1504 if (!yyvaluep) |
|
1505 return; |
|
1506 YYUSE (yylocationp); |
|
1507 YYUSE (context); |
|
1508 # ifdef YYPRINT |
|
1509 if (yytype < YYNTOKENS) |
|
1510 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); |
|
1511 # else |
|
1512 YYUSE (yyoutput); |
|
1513 # endif |
|
1514 switch (yytype) |
|
1515 { |
|
1516 default: |
|
1517 break; |
|
1518 } |
|
1519 } |
|
1520 |
|
1521 |
|
1522 /*--------------------------------. |
|
1523 | Print this symbol on YYOUTPUT. | |
|
1524 `--------------------------------*/ |
|
1525 |
|
1526 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1527 || defined __cplusplus || defined _MSC_VER) |
|
1528 static void |
|
1529 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, YYLTYPE const * const yylocationp, TParseContext* context) |
|
1530 #else |
|
1531 static void |
|
1532 yy_symbol_print (yyoutput, yytype, yyvaluep, yylocationp, context) |
|
1533 FILE *yyoutput; |
|
1534 int yytype; |
|
1535 YYSTYPE const * const yyvaluep; |
|
1536 YYLTYPE const * const yylocationp; |
|
1537 TParseContext* context; |
|
1538 #endif |
|
1539 { |
|
1540 if (yytype < YYNTOKENS) |
|
1541 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); |
|
1542 else |
|
1543 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); |
|
1544 |
|
1545 YY_LOCATION_PRINT (yyoutput, *yylocationp); |
|
1546 YYFPRINTF (yyoutput, ": "); |
|
1547 yy_symbol_value_print (yyoutput, yytype, yyvaluep, yylocationp, context); |
|
1548 YYFPRINTF (yyoutput, ")"); |
|
1549 } |
|
1550 |
|
1551 /*------------------------------------------------------------------. |
|
1552 | yy_stack_print -- Print the state stack from its BOTTOM up to its | |
|
1553 | TOP (included). | |
|
1554 `------------------------------------------------------------------*/ |
|
1555 |
|
1556 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1557 || defined __cplusplus || defined _MSC_VER) |
|
1558 static void |
|
1559 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) |
|
1560 #else |
|
1561 static void |
|
1562 yy_stack_print (yybottom, yytop) |
|
1563 yytype_int16 *yybottom; |
|
1564 yytype_int16 *yytop; |
|
1565 #endif |
|
1566 { |
|
1567 YYFPRINTF (stderr, "Stack now"); |
|
1568 for (; yybottom <= yytop; yybottom++) |
|
1569 { |
|
1570 int yybot = *yybottom; |
|
1571 YYFPRINTF (stderr, " %d", yybot); |
|
1572 } |
|
1573 YYFPRINTF (stderr, "\n"); |
|
1574 } |
|
1575 |
|
1576 # define YY_STACK_PRINT(Bottom, Top) \ |
|
1577 do { \ |
|
1578 if (yydebug) \ |
|
1579 yy_stack_print ((Bottom), (Top)); \ |
|
1580 } while (YYID (0)) |
|
1581 |
|
1582 |
|
1583 /*------------------------------------------------. |
|
1584 | Report that the YYRULE is going to be reduced. | |
|
1585 `------------------------------------------------*/ |
|
1586 |
|
1587 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1588 || defined __cplusplus || defined _MSC_VER) |
|
1589 static void |
|
1590 yy_reduce_print (YYSTYPE *yyvsp, YYLTYPE *yylsp, int yyrule, TParseContext* context) |
|
1591 #else |
|
1592 static void |
|
1593 yy_reduce_print (yyvsp, yylsp, yyrule, context) |
|
1594 YYSTYPE *yyvsp; |
|
1595 YYLTYPE *yylsp; |
|
1596 int yyrule; |
|
1597 TParseContext* context; |
|
1598 #endif |
|
1599 { |
|
1600 int yynrhs = yyr2[yyrule]; |
|
1601 int yyi; |
|
1602 unsigned long int yylno = yyrline[yyrule]; |
|
1603 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", |
|
1604 yyrule - 1, yylno); |
|
1605 /* The symbols being reduced. */ |
|
1606 for (yyi = 0; yyi < yynrhs; yyi++) |
|
1607 { |
|
1608 YYFPRINTF (stderr, " $%d = ", yyi + 1); |
|
1609 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], |
|
1610 &(yyvsp[(yyi + 1) - (yynrhs)]) |
|
1611 , &(yylsp[(yyi + 1) - (yynrhs)]) , context); |
|
1612 YYFPRINTF (stderr, "\n"); |
|
1613 } |
|
1614 } |
|
1615 |
|
1616 # define YY_REDUCE_PRINT(Rule) \ |
|
1617 do { \ |
|
1618 if (yydebug) \ |
|
1619 yy_reduce_print (yyvsp, yylsp, Rule, context); \ |
|
1620 } while (YYID (0)) |
|
1621 |
|
1622 /* Nonzero means print parse trace. It is left uninitialized so that |
|
1623 multiple parsers can coexist. */ |
|
1624 int yydebug; |
|
1625 #else /* !YYDEBUG */ |
|
1626 # define YYDPRINTF(Args) |
|
1627 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) |
|
1628 # define YY_STACK_PRINT(Bottom, Top) |
|
1629 # define YY_REDUCE_PRINT(Rule) |
|
1630 #endif /* !YYDEBUG */ |
|
1631 |
|
1632 |
|
1633 /* YYINITDEPTH -- initial size of the parser's stacks. */ |
|
1634 #ifndef YYINITDEPTH |
|
1635 # define YYINITDEPTH 200 |
|
1636 #endif |
|
1637 |
|
1638 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only |
|
1639 if the built-in stack extension method is used). |
|
1640 |
|
1641 Do not make this value too large; the results are undefined if |
|
1642 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) |
|
1643 evaluated with infinite-precision integer arithmetic. */ |
|
1644 |
|
1645 #ifndef YYMAXDEPTH |
|
1646 # define YYMAXDEPTH 10000 |
|
1647 #endif |
|
1648 |
|
1649 |
|
1650 #if YYERROR_VERBOSE |
|
1651 |
|
1652 # ifndef yystrlen |
|
1653 # if defined __GLIBC__ && defined _STRING_H |
|
1654 # define yystrlen strlen |
|
1655 # else |
|
1656 /* Return the length of YYSTR. */ |
|
1657 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1658 || defined __cplusplus || defined _MSC_VER) |
|
1659 static YYSIZE_T |
|
1660 yystrlen (const char *yystr) |
|
1661 #else |
|
1662 static YYSIZE_T |
|
1663 yystrlen (yystr) |
|
1664 const char *yystr; |
|
1665 #endif |
|
1666 { |
|
1667 YYSIZE_T yylen; |
|
1668 for (yylen = 0; yystr[yylen]; yylen++) |
|
1669 continue; |
|
1670 return yylen; |
|
1671 } |
|
1672 # endif |
|
1673 # endif |
|
1674 |
|
1675 # ifndef yystpcpy |
|
1676 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE |
|
1677 # define yystpcpy stpcpy |
|
1678 # else |
|
1679 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in |
|
1680 YYDEST. */ |
|
1681 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1682 || defined __cplusplus || defined _MSC_VER) |
|
1683 static char * |
|
1684 yystpcpy (char *yydest, const char *yysrc) |
|
1685 #else |
|
1686 static char * |
|
1687 yystpcpy (yydest, yysrc) |
|
1688 char *yydest; |
|
1689 const char *yysrc; |
|
1690 #endif |
|
1691 { |
|
1692 char *yyd = yydest; |
|
1693 const char *yys = yysrc; |
|
1694 |
|
1695 while ((*yyd++ = *yys++) != '\0') |
|
1696 continue; |
|
1697 |
|
1698 return yyd - 1; |
|
1699 } |
|
1700 # endif |
|
1701 # endif |
|
1702 |
|
1703 # ifndef yytnamerr |
|
1704 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary |
|
1705 quotes and backslashes, so that it's suitable for yyerror. The |
|
1706 heuristic is that double-quoting is unnecessary unless the string |
|
1707 contains an apostrophe, a comma, or backslash (other than |
|
1708 backslash-backslash). YYSTR is taken from yytname. If YYRES is |
|
1709 null, do not copy; instead, return the length of what the result |
|
1710 would have been. */ |
|
1711 static YYSIZE_T |
|
1712 yytnamerr (char *yyres, const char *yystr) |
|
1713 { |
|
1714 if (*yystr == '"') |
|
1715 { |
|
1716 YYSIZE_T yyn = 0; |
|
1717 char const *yyp = yystr; |
|
1718 |
|
1719 for (;;) |
|
1720 switch (*++yyp) |
|
1721 { |
|
1722 case '\'': |
|
1723 case ',': |
|
1724 goto do_not_strip_quotes; |
|
1725 |
|
1726 case '\\': |
|
1727 if (*++yyp != '\\') |
|
1728 goto do_not_strip_quotes; |
|
1729 /* Fall through. */ |
|
1730 default: |
|
1731 if (yyres) |
|
1732 yyres[yyn] = *yyp; |
|
1733 yyn++; |
|
1734 break; |
|
1735 |
|
1736 case '"': |
|
1737 if (yyres) |
|
1738 yyres[yyn] = '\0'; |
|
1739 return yyn; |
|
1740 } |
|
1741 do_not_strip_quotes: ; |
|
1742 } |
|
1743 |
|
1744 if (! yyres) |
|
1745 return yystrlen (yystr); |
|
1746 |
|
1747 return yystpcpy (yyres, yystr) - yyres; |
|
1748 } |
|
1749 # endif |
|
1750 |
|
1751 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message |
|
1752 about the unexpected token YYTOKEN for the state stack whose top is |
|
1753 YYSSP. |
|
1754 |
|
1755 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is |
|
1756 not large enough to hold the message. In that case, also set |
|
1757 *YYMSG_ALLOC to the required number of bytes. Return 2 if the |
|
1758 required number of bytes is too large to store. */ |
|
1759 static int |
|
1760 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, |
|
1761 yytype_int16 *yyssp, int yytoken) |
|
1762 { |
|
1763 YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); |
|
1764 YYSIZE_T yysize = yysize0; |
|
1765 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; |
|
1766 /* Internationalized format string. */ |
|
1767 const char *yyformat = YY_NULL; |
|
1768 /* Arguments of yyformat. */ |
|
1769 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; |
|
1770 /* Number of reported tokens (one for the "unexpected", one per |
|
1771 "expected"). */ |
|
1772 int yycount = 0; |
|
1773 |
|
1774 /* There are many possibilities here to consider: |
|
1775 - Assume YYFAIL is not used. It's too flawed to consider. See |
|
1776 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> |
|
1777 for details. YYERROR is fine as it does not invoke this |
|
1778 function. |
|
1779 - If this state is a consistent state with a default action, then |
|
1780 the only way this function was invoked is if the default action |
|
1781 is an error action. In that case, don't check for expected |
|
1782 tokens because there are none. |
|
1783 - The only way there can be no lookahead present (in yychar) is if |
|
1784 this state is a consistent state with a default action. Thus, |
|
1785 detecting the absence of a lookahead is sufficient to determine |
|
1786 that there is no unexpected or expected token to report. In that |
|
1787 case, just report a simple "syntax error". |
|
1788 - Don't assume there isn't a lookahead just because this state is a |
|
1789 consistent state with a default action. There might have been a |
|
1790 previous inconsistent state, consistent state with a non-default |
|
1791 action, or user semantic action that manipulated yychar. |
|
1792 - Of course, the expected token list depends on states to have |
|
1793 correct lookahead information, and it depends on the parser not |
|
1794 to perform extra reductions after fetching a lookahead from the |
|
1795 scanner and before detecting a syntax error. Thus, state merging |
|
1796 (from LALR or IELR) and default reductions corrupt the expected |
|
1797 token list. However, the list is correct for canonical LR with |
|
1798 one exception: it will still contain any token that will not be |
|
1799 accepted due to an error action in a later state. |
|
1800 */ |
|
1801 if (yytoken != YYEMPTY) |
|
1802 { |
|
1803 int yyn = yypact[*yyssp]; |
|
1804 yyarg[yycount++] = yytname[yytoken]; |
|
1805 if (!yypact_value_is_default (yyn)) |
|
1806 { |
|
1807 /* Start YYX at -YYN if negative to avoid negative indexes in |
|
1808 YYCHECK. In other words, skip the first -YYN actions for |
|
1809 this state because they are default actions. */ |
|
1810 int yyxbegin = yyn < 0 ? -yyn : 0; |
|
1811 /* Stay within bounds of both yycheck and yytname. */ |
|
1812 int yychecklim = YYLAST - yyn + 1; |
|
1813 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; |
|
1814 int yyx; |
|
1815 |
|
1816 for (yyx = yyxbegin; yyx < yyxend; ++yyx) |
|
1817 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR |
|
1818 && !yytable_value_is_error (yytable[yyx + yyn])) |
|
1819 { |
|
1820 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) |
|
1821 { |
|
1822 yycount = 1; |
|
1823 yysize = yysize0; |
|
1824 break; |
|
1825 } |
|
1826 yyarg[yycount++] = yytname[yyx]; |
|
1827 { |
|
1828 YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); |
|
1829 if (! (yysize <= yysize1 |
|
1830 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
|
1831 return 2; |
|
1832 yysize = yysize1; |
|
1833 } |
|
1834 } |
|
1835 } |
|
1836 } |
|
1837 |
|
1838 switch (yycount) |
|
1839 { |
|
1840 # define YYCASE_(N, S) \ |
|
1841 case N: \ |
|
1842 yyformat = S; \ |
|
1843 break |
|
1844 YYCASE_(0, YY_("syntax error")); |
|
1845 YYCASE_(1, YY_("syntax error, unexpected %s")); |
|
1846 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); |
|
1847 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); |
|
1848 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); |
|
1849 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); |
|
1850 # undef YYCASE_ |
|
1851 } |
|
1852 |
|
1853 { |
|
1854 YYSIZE_T yysize1 = yysize + yystrlen (yyformat); |
|
1855 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) |
|
1856 return 2; |
|
1857 yysize = yysize1; |
|
1858 } |
|
1859 |
|
1860 if (*yymsg_alloc < yysize) |
|
1861 { |
|
1862 *yymsg_alloc = 2 * yysize; |
|
1863 if (! (yysize <= *yymsg_alloc |
|
1864 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) |
|
1865 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; |
|
1866 return 1; |
|
1867 } |
|
1868 |
|
1869 /* Avoid sprintf, as that infringes on the user's name space. |
|
1870 Don't have undefined behavior even if the translation |
|
1871 produced a string with the wrong number of "%s"s. */ |
|
1872 { |
|
1873 char *yyp = *yymsg; |
|
1874 int yyi = 0; |
|
1875 while ((*yyp = *yyformat) != '\0') |
|
1876 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) |
|
1877 { |
|
1878 yyp += yytnamerr (yyp, yyarg[yyi++]); |
|
1879 yyformat += 2; |
|
1880 } |
|
1881 else |
|
1882 { |
|
1883 yyp++; |
|
1884 yyformat++; |
|
1885 } |
|
1886 } |
|
1887 return 0; |
|
1888 } |
|
1889 #endif /* YYERROR_VERBOSE */ |
|
1890 |
|
1891 /*-----------------------------------------------. |
|
1892 | Release the memory associated to this symbol. | |
|
1893 `-----------------------------------------------*/ |
|
1894 |
|
1895 /*ARGSUSED*/ |
|
1896 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1897 || defined __cplusplus || defined _MSC_VER) |
|
1898 static void |
|
1899 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE *yylocationp, TParseContext* context) |
|
1900 #else |
|
1901 static void |
|
1902 yydestruct (yymsg, yytype, yyvaluep, yylocationp, context) |
|
1903 const char *yymsg; |
|
1904 int yytype; |
|
1905 YYSTYPE *yyvaluep; |
|
1906 YYLTYPE *yylocationp; |
|
1907 TParseContext* context; |
|
1908 #endif |
|
1909 { |
|
1910 YYUSE (yyvaluep); |
|
1911 YYUSE (yylocationp); |
|
1912 YYUSE (context); |
|
1913 |
|
1914 if (!yymsg) |
|
1915 yymsg = "Deleting"; |
|
1916 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); |
|
1917 |
|
1918 switch (yytype) |
|
1919 { |
|
1920 |
|
1921 default: |
|
1922 break; |
|
1923 } |
|
1924 } |
|
1925 |
|
1926 |
|
1927 |
|
1928 |
|
1929 /*----------. |
|
1930 | yyparse. | |
|
1931 `----------*/ |
|
1932 |
|
1933 #ifdef YYPARSE_PARAM |
|
1934 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1935 || defined __cplusplus || defined _MSC_VER) |
|
1936 int |
|
1937 yyparse (void *YYPARSE_PARAM) |
|
1938 #else |
|
1939 int |
|
1940 yyparse (YYPARSE_PARAM) |
|
1941 void *YYPARSE_PARAM; |
|
1942 #endif |
|
1943 #else /* ! YYPARSE_PARAM */ |
|
1944 #if (defined __STDC__ || defined __C99__FUNC__ \ |
|
1945 || defined __cplusplus || defined _MSC_VER) |
|
1946 int |
|
1947 yyparse (TParseContext* context) |
|
1948 #else |
|
1949 int |
|
1950 yyparse (context) |
|
1951 TParseContext* context; |
|
1952 #endif |
|
1953 #endif |
|
1954 { |
|
1955 /* The lookahead symbol. */ |
|
1956 int yychar; |
|
1957 |
|
1958 |
|
1959 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ |
|
1960 /* Suppress an incorrect diagnostic about yylval being uninitialized. */ |
|
1961 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ |
|
1962 _Pragma ("GCC diagnostic push") \ |
|
1963 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ |
|
1964 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") |
|
1965 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ |
|
1966 _Pragma ("GCC diagnostic pop") |
|
1967 #else |
|
1968 /* Default value used for initialization, for pacifying older GCCs |
|
1969 or non-GCC compilers. */ |
|
1970 static YYSTYPE yyval_default; |
|
1971 # define YY_INITIAL_VALUE(Value) = Value |
|
1972 #endif |
|
1973 static YYLTYPE yyloc_default |
|
1974 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL |
|
1975 = { 1, 1, 1, 1 } |
|
1976 # endif |
|
1977 ; |
|
1978 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN |
|
1979 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN |
|
1980 # define YY_IGNORE_MAYBE_UNINITIALIZED_END |
|
1981 #endif |
|
1982 #ifndef YY_INITIAL_VALUE |
|
1983 # define YY_INITIAL_VALUE(Value) /* Nothing. */ |
|
1984 #endif |
|
1985 |
|
1986 /* The semantic value of the lookahead symbol. */ |
|
1987 YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); |
|
1988 |
|
1989 /* Location data for the lookahead symbol. */ |
|
1990 YYLTYPE yylloc = yyloc_default; |
|
1991 |
|
1992 |
|
1993 /* Number of syntax errors so far. */ |
|
1994 int yynerrs; |
|
1995 |
|
1996 int yystate; |
|
1997 /* Number of tokens to shift before error messages enabled. */ |
|
1998 int yyerrstatus; |
|
1999 |
|
2000 /* The stacks and their tools: |
|
2001 `yyss': related to states. |
|
2002 `yyvs': related to semantic values. |
|
2003 `yyls': related to locations. |
|
2004 |
|
2005 Refer to the stacks through separate pointers, to allow yyoverflow |
|
2006 to reallocate them elsewhere. */ |
|
2007 |
|
2008 /* The state stack. */ |
|
2009 yytype_int16 yyssa[YYINITDEPTH]; |
|
2010 yytype_int16 *yyss; |
|
2011 yytype_int16 *yyssp; |
|
2012 |
|
2013 /* The semantic value stack. */ |
|
2014 YYSTYPE yyvsa[YYINITDEPTH]; |
|
2015 YYSTYPE *yyvs; |
|
2016 YYSTYPE *yyvsp; |
|
2017 |
|
2018 /* The location stack. */ |
|
2019 YYLTYPE yylsa[YYINITDEPTH]; |
|
2020 YYLTYPE *yyls; |
|
2021 YYLTYPE *yylsp; |
|
2022 |
|
2023 /* The locations where the error started and ended. */ |
|
2024 YYLTYPE yyerror_range[3]; |
|
2025 |
|
2026 YYSIZE_T yystacksize; |
|
2027 |
|
2028 int yyn; |
|
2029 int yyresult; |
|
2030 /* Lookahead token as an internal (translated) token number. */ |
|
2031 int yytoken = 0; |
|
2032 /* The variables used to return semantic value and location from the |
|
2033 action routines. */ |
|
2034 YYSTYPE yyval; |
|
2035 YYLTYPE yyloc; |
|
2036 |
|
2037 #if YYERROR_VERBOSE |
|
2038 /* Buffer for error messages, and its allocated size. */ |
|
2039 char yymsgbuf[128]; |
|
2040 char *yymsg = yymsgbuf; |
|
2041 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; |
|
2042 #endif |
|
2043 |
|
2044 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N), yylsp -= (N)) |
|
2045 |
|
2046 /* The number of symbols on the RHS of the reduced rule. |
|
2047 Keep to zero when no symbol should be popped. */ |
|
2048 int yylen = 0; |
|
2049 |
|
2050 yyssp = yyss = yyssa; |
|
2051 yyvsp = yyvs = yyvsa; |
|
2052 yylsp = yyls = yylsa; |
|
2053 yystacksize = YYINITDEPTH; |
|
2054 |
|
2055 YYDPRINTF ((stderr, "Starting parse\n")); |
|
2056 |
|
2057 yystate = 0; |
|
2058 yyerrstatus = 0; |
|
2059 yynerrs = 0; |
|
2060 yychar = YYEMPTY; /* Cause a token to be read. */ |
|
2061 yylsp[0] = yylloc; |
|
2062 goto yysetstate; |
|
2063 |
|
2064 /*------------------------------------------------------------. |
|
2065 | yynewstate -- Push a new state, which is found in yystate. | |
|
2066 `------------------------------------------------------------*/ |
|
2067 yynewstate: |
|
2068 /* In all cases, when you get here, the value and location stacks |
|
2069 have just been pushed. So pushing a state here evens the stacks. */ |
|
2070 yyssp++; |
|
2071 |
|
2072 yysetstate: |
|
2073 *yyssp = yystate; |
|
2074 |
|
2075 if (yyss + yystacksize - 1 <= yyssp) |
|
2076 { |
|
2077 /* Get the current used size of the three stacks, in elements. */ |
|
2078 YYSIZE_T yysize = yyssp - yyss + 1; |
|
2079 |
|
2080 #ifdef yyoverflow |
|
2081 { |
|
2082 /* Give user a chance to reallocate the stack. Use copies of |
|
2083 these so that the &'s don't force the real ones into |
|
2084 memory. */ |
|
2085 YYSTYPE *yyvs1 = yyvs; |
|
2086 yytype_int16 *yyss1 = yyss; |
|
2087 YYLTYPE *yyls1 = yyls; |
|
2088 |
|
2089 /* Each stack pointer address is followed by the size of the |
|
2090 data in use in that stack, in bytes. This used to be a |
|
2091 conditional around just the two extra args, but that might |
|
2092 be undefined if yyoverflow is a macro. */ |
|
2093 yyoverflow (YY_("memory exhausted"), |
|
2094 &yyss1, yysize * sizeof (*yyssp), |
|
2095 &yyvs1, yysize * sizeof (*yyvsp), |
|
2096 &yyls1, yysize * sizeof (*yylsp), |
|
2097 &yystacksize); |
|
2098 |
|
2099 yyls = yyls1; |
|
2100 yyss = yyss1; |
|
2101 yyvs = yyvs1; |
|
2102 } |
|
2103 #else /* no yyoverflow */ |
|
2104 # ifndef YYSTACK_RELOCATE |
|
2105 goto yyexhaustedlab; |
|
2106 # else |
|
2107 /* Extend the stack our own way. */ |
|
2108 if (YYMAXDEPTH <= yystacksize) |
|
2109 goto yyexhaustedlab; |
|
2110 yystacksize *= 2; |
|
2111 if (YYMAXDEPTH < yystacksize) |
|
2112 yystacksize = YYMAXDEPTH; |
|
2113 |
|
2114 { |
|
2115 yytype_int16 *yyss1 = yyss; |
|
2116 union yyalloc *yyptr = |
|
2117 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); |
|
2118 if (! yyptr) |
|
2119 goto yyexhaustedlab; |
|
2120 YYSTACK_RELOCATE (yyss_alloc, yyss); |
|
2121 YYSTACK_RELOCATE (yyvs_alloc, yyvs); |
|
2122 YYSTACK_RELOCATE (yyls_alloc, yyls); |
|
2123 # undef YYSTACK_RELOCATE |
|
2124 if (yyss1 != yyssa) |
|
2125 YYSTACK_FREE (yyss1); |
|
2126 } |
|
2127 # endif |
|
2128 #endif /* no yyoverflow */ |
|
2129 |
|
2130 yyssp = yyss + yysize - 1; |
|
2131 yyvsp = yyvs + yysize - 1; |
|
2132 yylsp = yyls + yysize - 1; |
|
2133 |
|
2134 YYDPRINTF ((stderr, "Stack size increased to %lu\n", |
|
2135 (unsigned long int) yystacksize)); |
|
2136 |
|
2137 if (yyss + yystacksize - 1 <= yyssp) |
|
2138 YYABORT; |
|
2139 } |
|
2140 |
|
2141 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); |
|
2142 |
|
2143 if (yystate == YYFINAL) |
|
2144 YYACCEPT; |
|
2145 |
|
2146 goto yybackup; |
|
2147 |
|
2148 /*-----------. |
|
2149 | yybackup. | |
|
2150 `-----------*/ |
|
2151 yybackup: |
|
2152 |
|
2153 /* Do appropriate processing given the current state. Read a |
|
2154 lookahead token if we need one and don't already have one. */ |
|
2155 |
|
2156 /* First try to decide what to do without reference to lookahead token. */ |
|
2157 yyn = yypact[yystate]; |
|
2158 if (yypact_value_is_default (yyn)) |
|
2159 goto yydefault; |
|
2160 |
|
2161 /* Not known => get a lookahead token if don't already have one. */ |
|
2162 |
|
2163 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ |
|
2164 if (yychar == YYEMPTY) |
|
2165 { |
|
2166 YYDPRINTF ((stderr, "Reading a token: ")); |
|
2167 yychar = YYLEX; |
|
2168 } |
|
2169 |
|
2170 if (yychar <= YYEOF) |
|
2171 { |
|
2172 yychar = yytoken = YYEOF; |
|
2173 YYDPRINTF ((stderr, "Now at end of input.\n")); |
|
2174 } |
|
2175 else |
|
2176 { |
|
2177 yytoken = YYTRANSLATE (yychar); |
|
2178 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); |
|
2179 } |
|
2180 |
|
2181 /* If the proper action on seeing token YYTOKEN is to reduce or to |
|
2182 detect an error, take that action. */ |
|
2183 yyn += yytoken; |
|
2184 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) |
|
2185 goto yydefault; |
|
2186 yyn = yytable[yyn]; |
|
2187 if (yyn <= 0) |
|
2188 { |
|
2189 if (yytable_value_is_error (yyn)) |
|
2190 goto yyerrlab; |
|
2191 yyn = -yyn; |
|
2192 goto yyreduce; |
|
2193 } |
|
2194 |
|
2195 /* Count tokens shifted since error; after three, turn off error |
|
2196 status. */ |
|
2197 if (yyerrstatus) |
|
2198 yyerrstatus--; |
|
2199 |
|
2200 /* Shift the lookahead token. */ |
|
2201 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); |
|
2202 |
|
2203 /* Discard the shifted token. */ |
|
2204 yychar = YYEMPTY; |
|
2205 |
|
2206 yystate = yyn; |
|
2207 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN |
|
2208 *++yyvsp = yylval; |
|
2209 YY_IGNORE_MAYBE_UNINITIALIZED_END |
|
2210 *++yylsp = yylloc; |
|
2211 goto yynewstate; |
|
2212 |
|
2213 |
|
2214 /*-----------------------------------------------------------. |
|
2215 | yydefault -- do the default action for the current state. | |
|
2216 `-----------------------------------------------------------*/ |
|
2217 yydefault: |
|
2218 yyn = yydefact[yystate]; |
|
2219 if (yyn == 0) |
|
2220 goto yyerrlab; |
|
2221 goto yyreduce; |
|
2222 |
|
2223 |
|
2224 /*-----------------------------. |
|
2225 | yyreduce -- Do a reduction. | |
|
2226 `-----------------------------*/ |
|
2227 yyreduce: |
|
2228 /* yyn is the number of a rule to reduce with. */ |
|
2229 yylen = yyr2[yyn]; |
|
2230 |
|
2231 /* If YYLEN is nonzero, implement the default value of the action: |
|
2232 `$$ = $1'. |
|
2233 |
|
2234 Otherwise, the following line sets YYVAL to garbage. |
|
2235 This behavior is undocumented and Bison |
|
2236 users should not rely upon it. Assigning to YYVAL |
|
2237 unconditionally makes the parser a bit smaller, and it avoids a |
|
2238 GCC warning that YYVAL may be used uninitialized. */ |
|
2239 yyval = yyvsp[1-yylen]; |
|
2240 |
|
2241 /* Default location. */ |
|
2242 YYLLOC_DEFAULT (yyloc, (yylsp - yylen), yylen); |
|
2243 YY_REDUCE_PRINT (yyn); |
|
2244 switch (yyn) |
|
2245 { |
|
2246 case 4: |
|
2247 |
|
2248 { |
|
2249 // The symbol table search was done in the lexical phase |
|
2250 const TSymbol* symbol = (yyvsp[(1) - (1)].lex).symbol; |
|
2251 const TVariable* variable; |
|
2252 if (symbol == 0) { |
|
2253 context->error((yylsp[(1) - (1)]), "undeclared identifier", (yyvsp[(1) - (1)].lex).string->c_str()); |
|
2254 context->recover(); |
|
2255 TType type(EbtFloat, EbpUndefined); |
|
2256 TVariable* fakeVariable = new TVariable((yyvsp[(1) - (1)].lex).string, type); |
|
2257 context->symbolTable.insert(*fakeVariable); |
|
2258 variable = fakeVariable; |
|
2259 } else { |
|
2260 // This identifier can only be a variable type symbol |
|
2261 if (! symbol->isVariable()) { |
|
2262 context->error((yylsp[(1) - (1)]), "variable expected", (yyvsp[(1) - (1)].lex).string->c_str()); |
|
2263 context->recover(); |
|
2264 } |
|
2265 |
|
2266 variable = static_cast<const TVariable*>(symbol); |
|
2267 |
|
2268 if (context->symbolTable.findBuiltIn(variable->getName()) && |
|
2269 !variable->getExtension().empty() && |
|
2270 context->extensionErrorCheck((yylsp[(1) - (1)]), variable->getExtension())) { |
|
2271 context->recover(); |
|
2272 } |
|
2273 } |
|
2274 |
|
2275 // don't delete $1.string, it's used by error recovery, and the pool |
|
2276 // pop will reclaim the memory |
|
2277 |
|
2278 if (variable->getType().getQualifier() == EvqConst ) { |
|
2279 ConstantUnion* constArray = variable->getConstPointer(); |
|
2280 TType t(variable->getType()); |
|
2281 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(constArray, t, (yylsp[(1) - (1)])); |
|
2282 } else |
|
2283 (yyval.interm.intermTypedNode) = context->intermediate.addSymbol(variable->getUniqueId(), |
|
2284 variable->getName(), |
|
2285 variable->getType(), |
|
2286 (yylsp[(1) - (1)])); |
|
2287 } |
|
2288 break; |
|
2289 |
|
2290 case 5: |
|
2291 |
|
2292 { |
|
2293 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
2294 } |
|
2295 break; |
|
2296 |
|
2297 case 6: |
|
2298 |
|
2299 { |
|
2300 // |
|
2301 // INT_TYPE is only 16-bit plus sign bit for vertex/fragment shaders, |
|
2302 // check for overflow for constants |
|
2303 // |
|
2304 if (abs((yyvsp[(1) - (1)].lex).i) >= (1 << 16)) { |
|
2305 context->error((yylsp[(1) - (1)]), " integer constant overflow", ""); |
|
2306 context->recover(); |
|
2307 } |
|
2308 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2309 unionArray->setIConst((yyvsp[(1) - (1)].lex).i); |
|
2310 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yylsp[(1) - (1)])); |
|
2311 } |
|
2312 break; |
|
2313 |
|
2314 case 7: |
|
2315 |
|
2316 { |
|
2317 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2318 unionArray->setFConst((yyvsp[(1) - (1)].lex).f); |
|
2319 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpUndefined, EvqConst), (yylsp[(1) - (1)])); |
|
2320 } |
|
2321 break; |
|
2322 |
|
2323 case 8: |
|
2324 |
|
2325 { |
|
2326 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2327 unionArray->setBConst((yyvsp[(1) - (1)].lex).b); |
|
2328 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(1) - (1)])); |
|
2329 } |
|
2330 break; |
|
2331 |
|
2332 case 9: |
|
2333 |
|
2334 { |
|
2335 (yyval.interm.intermTypedNode) = (yyvsp[(2) - (3)].interm.intermTypedNode); |
|
2336 } |
|
2337 break; |
|
2338 |
|
2339 case 10: |
|
2340 |
|
2341 { |
|
2342 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
2343 } |
|
2344 break; |
|
2345 |
|
2346 case 11: |
|
2347 |
|
2348 { |
|
2349 (yyval.interm.intermTypedNode) = context->addIndexExpression((yyvsp[(1) - (4)].interm.intermTypedNode), (yylsp[(2) - (4)]), (yyvsp[(3) - (4)].interm.intermTypedNode)); |
|
2350 } |
|
2351 break; |
|
2352 |
|
2353 case 12: |
|
2354 |
|
2355 { |
|
2356 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
2357 } |
|
2358 break; |
|
2359 |
|
2360 case 13: |
|
2361 |
|
2362 { |
|
2363 if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isArray()) { |
|
2364 context->error((yylsp[(3) - (3)]), "cannot apply dot operator to an array", "."); |
|
2365 context->recover(); |
|
2366 } |
|
2367 |
|
2368 if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isVector()) { |
|
2369 TVectorFields fields; |
|
2370 if (! context->parseVectorFields(*(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize(), fields, (yylsp[(3) - (3)]))) { |
|
2371 fields.num = 1; |
|
2372 fields.offsets[0] = 0; |
|
2373 context->recover(); |
|
2374 } |
|
2375 |
|
2376 if ((yyvsp[(1) - (3)].interm.intermTypedNode)->getType().getQualifier() == EvqConst) { // constant folding for vector fields |
|
2377 (yyval.interm.intermTypedNode) = context->addConstVectorNode(fields, (yyvsp[(1) - (3)].interm.intermTypedNode), (yylsp[(3) - (3)])); |
|
2378 if ((yyval.interm.intermTypedNode) == 0) { |
|
2379 context->recover(); |
|
2380 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2381 } |
|
2382 else |
|
2383 (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision(), EvqConst, (int) (*(yyvsp[(3) - (3)].lex).string).size())); |
|
2384 } else { |
|
2385 TString vectorString = *(yyvsp[(3) - (3)].lex).string; |
|
2386 TIntermTyped* index = context->intermediate.addSwizzle(fields, (yylsp[(3) - (3)])); |
|
2387 (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpVectorSwizzle, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yylsp[(2) - (3)])); |
|
2388 (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision(), EvqTemporary, (int) vectorString.size())); |
|
2389 } |
|
2390 } else if ((yyvsp[(1) - (3)].interm.intermTypedNode)->isMatrix()) { |
|
2391 TMatrixFields fields; |
|
2392 if (! context->parseMatrixFields(*(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize(), fields, (yylsp[(3) - (3)]))) { |
|
2393 fields.wholeRow = false; |
|
2394 fields.wholeCol = false; |
|
2395 fields.row = 0; |
|
2396 fields.col = 0; |
|
2397 context->recover(); |
|
2398 } |
|
2399 |
|
2400 if (fields.wholeRow || fields.wholeCol) { |
|
2401 context->error((yylsp[(2) - (3)]), " non-scalar fields not implemented yet", "."); |
|
2402 context->recover(); |
|
2403 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2404 unionArray->setIConst(0); |
|
2405 TIntermTyped* index = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yylsp[(3) - (3)])); |
|
2406 (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirect, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yylsp[(2) - (3)])); |
|
2407 (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision(),EvqTemporary, (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize())); |
|
2408 } else { |
|
2409 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2410 unionArray->setIConst(fields.col * (yyvsp[(1) - (3)].interm.intermTypedNode)->getNominalSize() + fields.row); |
|
2411 TIntermTyped* index = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yylsp[(3) - (3)])); |
|
2412 (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirect, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yylsp[(2) - (3)])); |
|
2413 (yyval.interm.intermTypedNode)->setType(TType((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType(), (yyvsp[(1) - (3)].interm.intermTypedNode)->getPrecision())); |
|
2414 } |
|
2415 } else if ((yyvsp[(1) - (3)].interm.intermTypedNode)->getBasicType() == EbtStruct) { |
|
2416 bool fieldFound = false; |
|
2417 const TFieldList& fields = (yyvsp[(1) - (3)].interm.intermTypedNode)->getType().getStruct()->fields(); |
|
2418 unsigned int i; |
|
2419 for (i = 0; i < fields.size(); ++i) { |
|
2420 if (fields[i]->name() == *(yyvsp[(3) - (3)].lex).string) { |
|
2421 fieldFound = true; |
|
2422 break; |
|
2423 } |
|
2424 } |
|
2425 if (fieldFound) { |
|
2426 if ((yyvsp[(1) - (3)].interm.intermTypedNode)->getType().getQualifier() == EvqConst) { |
|
2427 (yyval.interm.intermTypedNode) = context->addConstStruct(*(yyvsp[(3) - (3)].lex).string, (yyvsp[(1) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)])); |
|
2428 if ((yyval.interm.intermTypedNode) == 0) { |
|
2429 context->recover(); |
|
2430 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2431 } |
|
2432 else { |
|
2433 (yyval.interm.intermTypedNode)->setType(*fields[i]->type()); |
|
2434 // change the qualifier of the return type, not of the structure field |
|
2435 // as the structure definition is shared between various structures. |
|
2436 (yyval.interm.intermTypedNode)->getTypePointer()->setQualifier(EvqConst); |
|
2437 } |
|
2438 } else { |
|
2439 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2440 unionArray->setIConst(i); |
|
2441 TIntermTyped* index = context->intermediate.addConstantUnion(unionArray, *fields[i]->type(), (yylsp[(3) - (3)])); |
|
2442 (yyval.interm.intermTypedNode) = context->intermediate.addIndex(EOpIndexDirectStruct, (yyvsp[(1) - (3)].interm.intermTypedNode), index, (yylsp[(2) - (3)])); |
|
2443 (yyval.interm.intermTypedNode)->setType(*fields[i]->type()); |
|
2444 } |
|
2445 } else { |
|
2446 context->error((yylsp[(2) - (3)]), " no such field in structure", (yyvsp[(3) - (3)].lex).string->c_str()); |
|
2447 context->recover(); |
|
2448 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2449 } |
|
2450 } else { |
|
2451 context->error((yylsp[(2) - (3)]), " field selection requires structure, vector, or matrix on left hand side", (yyvsp[(3) - (3)].lex).string->c_str()); |
|
2452 context->recover(); |
|
2453 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2454 } |
|
2455 // don't delete $3.string, it's from the pool |
|
2456 } |
|
2457 break; |
|
2458 |
|
2459 case 14: |
|
2460 |
|
2461 { |
|
2462 if (context->lValueErrorCheck((yylsp[(2) - (2)]), "++", (yyvsp[(1) - (2)].interm.intermTypedNode))) |
|
2463 context->recover(); |
|
2464 (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPostIncrement, (yyvsp[(1) - (2)].interm.intermTypedNode), (yylsp[(2) - (2)]), context->symbolTable); |
|
2465 if ((yyval.interm.intermTypedNode) == 0) { |
|
2466 context->unaryOpError((yylsp[(2) - (2)]), "++", (yyvsp[(1) - (2)].interm.intermTypedNode)->getCompleteString()); |
|
2467 context->recover(); |
|
2468 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (2)].interm.intermTypedNode); |
|
2469 } |
|
2470 } |
|
2471 break; |
|
2472 |
|
2473 case 15: |
|
2474 |
|
2475 { |
|
2476 if (context->lValueErrorCheck((yylsp[(2) - (2)]), "--", (yyvsp[(1) - (2)].interm.intermTypedNode))) |
|
2477 context->recover(); |
|
2478 (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPostDecrement, (yyvsp[(1) - (2)].interm.intermTypedNode), (yylsp[(2) - (2)]), context->symbolTable); |
|
2479 if ((yyval.interm.intermTypedNode) == 0) { |
|
2480 context->unaryOpError((yylsp[(2) - (2)]), "--", (yyvsp[(1) - (2)].interm.intermTypedNode)->getCompleteString()); |
|
2481 context->recover(); |
|
2482 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (2)].interm.intermTypedNode); |
|
2483 } |
|
2484 } |
|
2485 break; |
|
2486 |
|
2487 case 16: |
|
2488 |
|
2489 { |
|
2490 if (context->integerErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode), "[]")) |
|
2491 context->recover(); |
|
2492 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
2493 } |
|
2494 break; |
|
2495 |
|
2496 case 17: |
|
2497 |
|
2498 { |
|
2499 TFunction* fnCall = (yyvsp[(1) - (1)].interm).function; |
|
2500 TOperator op = fnCall->getBuiltInOp(); |
|
2501 |
|
2502 if (op != EOpNull) |
|
2503 { |
|
2504 // |
|
2505 // Then this should be a constructor. |
|
2506 // Don't go through the symbol table for constructors. |
|
2507 // Their parameters will be verified algorithmically. |
|
2508 // |
|
2509 TType type(EbtVoid, EbpUndefined); // use this to get the type back |
|
2510 if (context->constructorErrorCheck((yylsp[(1) - (1)]), (yyvsp[(1) - (1)].interm).intermNode, *fnCall, op, &type)) { |
|
2511 (yyval.interm.intermTypedNode) = 0; |
|
2512 } else { |
|
2513 // |
|
2514 // It's a constructor, of type 'type'. |
|
2515 // |
|
2516 (yyval.interm.intermTypedNode) = context->addConstructor((yyvsp[(1) - (1)].interm).intermNode, &type, op, fnCall, (yylsp[(1) - (1)])); |
|
2517 } |
|
2518 |
|
2519 if ((yyval.interm.intermTypedNode) == 0) { |
|
2520 context->recover(); |
|
2521 (yyval.interm.intermTypedNode) = context->intermediate.setAggregateOperator(0, op, (yylsp[(1) - (1)])); |
|
2522 } |
|
2523 (yyval.interm.intermTypedNode)->setType(type); |
|
2524 } else { |
|
2525 // |
|
2526 // Not a constructor. Find it in the symbol table. |
|
2527 // |
|
2528 const TFunction* fnCandidate; |
|
2529 bool builtIn; |
|
2530 fnCandidate = context->findFunction((yylsp[(1) - (1)]), fnCall, &builtIn); |
|
2531 if (fnCandidate) { |
|
2532 // |
|
2533 // A declared function. |
|
2534 // |
|
2535 if (builtIn && !fnCandidate->getExtension().empty() && |
|
2536 context->extensionErrorCheck((yylsp[(1) - (1)]), fnCandidate->getExtension())) { |
|
2537 context->recover(); |
|
2538 } |
|
2539 op = fnCandidate->getBuiltInOp(); |
|
2540 if (builtIn && op != EOpNull) { |
|
2541 // |
|
2542 // A function call mapped to a built-in operation. |
|
2543 // |
|
2544 if (fnCandidate->getParamCount() == 1) { |
|
2545 // |
|
2546 // Treat it like a built-in unary operator. |
|
2547 // |
|
2548 (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(op, (yyvsp[(1) - (1)].interm).intermNode, (yylsp[(1) - (1)]), context->symbolTable); |
|
2549 if ((yyval.interm.intermTypedNode) == 0) { |
|
2550 std::stringstream extraInfoStream; |
|
2551 extraInfoStream << "built in unary operator function. Type: " << static_cast<TIntermTyped*>((yyvsp[(1) - (1)].interm).intermNode)->getCompleteString(); |
|
2552 std::string extraInfo = extraInfoStream.str(); |
|
2553 context->error((yyvsp[(1) - (1)].interm).intermNode->getLine(), " wrong operand type", "Internal Error", extraInfo.c_str()); |
|
2554 YYERROR; |
|
2555 } |
|
2556 } else { |
|
2557 (yyval.interm.intermTypedNode) = context->intermediate.setAggregateOperator((yyvsp[(1) - (1)].interm).intermAggregate, op, (yylsp[(1) - (1)])); |
|
2558 } |
|
2559 } else { |
|
2560 // This is a real function call |
|
2561 |
|
2562 (yyval.interm.intermTypedNode) = context->intermediate.setAggregateOperator((yyvsp[(1) - (1)].interm).intermAggregate, EOpFunctionCall, (yylsp[(1) - (1)])); |
|
2563 (yyval.interm.intermTypedNode)->setType(fnCandidate->getReturnType()); |
|
2564 |
|
2565 // this is how we know whether the given function is a builtIn function or a user defined function |
|
2566 // if builtIn == false, it's a userDefined -> could be an overloaded builtIn function also |
|
2567 // if builtIn == true, it's definitely a builtIn function with EOpNull |
|
2568 if (!builtIn) |
|
2569 (yyval.interm.intermTypedNode)->getAsAggregate()->setUserDefined(); |
|
2570 (yyval.interm.intermTypedNode)->getAsAggregate()->setName(fnCandidate->getMangledName()); |
|
2571 |
|
2572 TQualifier qual; |
|
2573 for (size_t i = 0; i < fnCandidate->getParamCount(); ++i) { |
|
2574 qual = fnCandidate->getParam(i).type->getQualifier(); |
|
2575 if (qual == EvqOut || qual == EvqInOut) { |
|
2576 if (context->lValueErrorCheck((yyval.interm.intermTypedNode)->getLine(), "assign", (yyval.interm.intermTypedNode)->getAsAggregate()->getSequence()[i]->getAsTyped())) { |
|
2577 context->error((yyvsp[(1) - (1)].interm).intermNode->getLine(), "Constant value cannot be passed for 'out' or 'inout' parameters.", "Error"); |
|
2578 context->recover(); |
|
2579 } |
|
2580 } |
|
2581 } |
|
2582 } |
|
2583 (yyval.interm.intermTypedNode)->setType(fnCandidate->getReturnType()); |
|
2584 } else { |
|
2585 // error message was put out by PaFindFunction() |
|
2586 // Put on a dummy node for error recovery |
|
2587 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2588 unionArray->setFConst(0.0f); |
|
2589 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtFloat, EbpUndefined, EvqConst), (yylsp[(1) - (1)])); |
|
2590 context->recover(); |
|
2591 } |
|
2592 } |
|
2593 delete fnCall; |
|
2594 } |
|
2595 break; |
|
2596 |
|
2597 case 18: |
|
2598 |
|
2599 { |
|
2600 (yyval.interm) = (yyvsp[(1) - (1)].interm); |
|
2601 } |
|
2602 break; |
|
2603 |
|
2604 case 19: |
|
2605 |
|
2606 { |
|
2607 context->error((yylsp[(3) - (3)]), "methods are not supported", ""); |
|
2608 context->recover(); |
|
2609 (yyval.interm) = (yyvsp[(3) - (3)].interm); |
|
2610 } |
|
2611 break; |
|
2612 |
|
2613 case 20: |
|
2614 |
|
2615 { |
|
2616 (yyval.interm) = (yyvsp[(1) - (2)].interm); |
|
2617 } |
|
2618 break; |
|
2619 |
|
2620 case 21: |
|
2621 |
|
2622 { |
|
2623 (yyval.interm) = (yyvsp[(1) - (2)].interm); |
|
2624 } |
|
2625 break; |
|
2626 |
|
2627 case 22: |
|
2628 |
|
2629 { |
|
2630 (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); |
|
2631 (yyval.interm).intermNode = 0; |
|
2632 } |
|
2633 break; |
|
2634 |
|
2635 case 23: |
|
2636 |
|
2637 { |
|
2638 (yyval.interm).function = (yyvsp[(1) - (1)].interm.function); |
|
2639 (yyval.interm).intermNode = 0; |
|
2640 } |
|
2641 break; |
|
2642 |
|
2643 case 24: |
|
2644 |
|
2645 { |
|
2646 TParameter param = { 0, new TType((yyvsp[(2) - (2)].interm.intermTypedNode)->getType()) }; |
|
2647 (yyvsp[(1) - (2)].interm.function)->addParameter(param); |
|
2648 (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); |
|
2649 (yyval.interm).intermNode = (yyvsp[(2) - (2)].interm.intermTypedNode); |
|
2650 } |
|
2651 break; |
|
2652 |
|
2653 case 25: |
|
2654 |
|
2655 { |
|
2656 TParameter param = { 0, new TType((yyvsp[(3) - (3)].interm.intermTypedNode)->getType()) }; |
|
2657 (yyvsp[(1) - (3)].interm).function->addParameter(param); |
|
2658 (yyval.interm).function = (yyvsp[(1) - (3)].interm).function; |
|
2659 (yyval.interm).intermNode = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)])); |
|
2660 } |
|
2661 break; |
|
2662 |
|
2663 case 26: |
|
2664 |
|
2665 { |
|
2666 (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function); |
|
2667 } |
|
2668 break; |
|
2669 |
|
2670 case 27: |
|
2671 |
|
2672 { |
|
2673 // |
|
2674 // Constructor |
|
2675 // |
|
2676 TOperator op = EOpNull; |
|
2677 if ((yyvsp[(1) - (1)].interm.type).userDef) { |
|
2678 op = EOpConstructStruct; |
|
2679 } else { |
|
2680 switch ((yyvsp[(1) - (1)].interm.type).type) { |
|
2681 case EbtFloat: |
|
2682 if ((yyvsp[(1) - (1)].interm.type).matrix) { |
|
2683 switch((yyvsp[(1) - (1)].interm.type).size) { |
|
2684 case 2: op = EOpConstructMat2; break; |
|
2685 case 3: op = EOpConstructMat3; break; |
|
2686 case 4: op = EOpConstructMat4; break; |
|
2687 } |
|
2688 } else { |
|
2689 switch((yyvsp[(1) - (1)].interm.type).size) { |
|
2690 case 1: op = EOpConstructFloat; break; |
|
2691 case 2: op = EOpConstructVec2; break; |
|
2692 case 3: op = EOpConstructVec3; break; |
|
2693 case 4: op = EOpConstructVec4; break; |
|
2694 } |
|
2695 } |
|
2696 break; |
|
2697 case EbtInt: |
|
2698 switch((yyvsp[(1) - (1)].interm.type).size) { |
|
2699 case 1: op = EOpConstructInt; break; |
|
2700 case 2: op = EOpConstructIVec2; break; |
|
2701 case 3: op = EOpConstructIVec3; break; |
|
2702 case 4: op = EOpConstructIVec4; break; |
|
2703 } |
|
2704 break; |
|
2705 case EbtBool: |
|
2706 switch((yyvsp[(1) - (1)].interm.type).size) { |
|
2707 case 1: op = EOpConstructBool; break; |
|
2708 case 2: op = EOpConstructBVec2; break; |
|
2709 case 3: op = EOpConstructBVec3; break; |
|
2710 case 4: op = EOpConstructBVec4; break; |
|
2711 } |
|
2712 break; |
|
2713 default: break; |
|
2714 } |
|
2715 if (op == EOpNull) { |
|
2716 context->error((yylsp[(1) - (1)]), "cannot construct this type", getBasicString((yyvsp[(1) - (1)].interm.type).type)); |
|
2717 context->recover(); |
|
2718 (yyvsp[(1) - (1)].interm.type).type = EbtFloat; |
|
2719 op = EOpConstructFloat; |
|
2720 } |
|
2721 } |
|
2722 TString tempString; |
|
2723 TType type((yyvsp[(1) - (1)].interm.type)); |
|
2724 TFunction *function = new TFunction(&tempString, type, op); |
|
2725 (yyval.interm.function) = function; |
|
2726 } |
|
2727 break; |
|
2728 |
|
2729 case 28: |
|
2730 |
|
2731 { |
|
2732 if (context->reservedErrorCheck((yylsp[(1) - (1)]), *(yyvsp[(1) - (1)].lex).string)) |
|
2733 context->recover(); |
|
2734 TType type(EbtVoid, EbpUndefined); |
|
2735 TFunction *function = new TFunction((yyvsp[(1) - (1)].lex).string, type); |
|
2736 (yyval.interm.function) = function; |
|
2737 } |
|
2738 break; |
|
2739 |
|
2740 case 29: |
|
2741 |
|
2742 { |
|
2743 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
2744 } |
|
2745 break; |
|
2746 |
|
2747 case 30: |
|
2748 |
|
2749 { |
|
2750 if (context->lValueErrorCheck((yylsp[(1) - (2)]), "++", (yyvsp[(2) - (2)].interm.intermTypedNode))) |
|
2751 context->recover(); |
|
2752 (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPreIncrement, (yyvsp[(2) - (2)].interm.intermTypedNode), (yylsp[(1) - (2)]), context->symbolTable); |
|
2753 if ((yyval.interm.intermTypedNode) == 0) { |
|
2754 context->unaryOpError((yylsp[(1) - (2)]), "++", (yyvsp[(2) - (2)].interm.intermTypedNode)->getCompleteString()); |
|
2755 context->recover(); |
|
2756 (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode); |
|
2757 } |
|
2758 } |
|
2759 break; |
|
2760 |
|
2761 case 31: |
|
2762 |
|
2763 { |
|
2764 if (context->lValueErrorCheck((yylsp[(1) - (2)]), "--", (yyvsp[(2) - (2)].interm.intermTypedNode))) |
|
2765 context->recover(); |
|
2766 (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath(EOpPreDecrement, (yyvsp[(2) - (2)].interm.intermTypedNode), (yylsp[(1) - (2)]), context->symbolTable); |
|
2767 if ((yyval.interm.intermTypedNode) == 0) { |
|
2768 context->unaryOpError((yylsp[(1) - (2)]), "--", (yyvsp[(2) - (2)].interm.intermTypedNode)->getCompleteString()); |
|
2769 context->recover(); |
|
2770 (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode); |
|
2771 } |
|
2772 } |
|
2773 break; |
|
2774 |
|
2775 case 32: |
|
2776 |
|
2777 { |
|
2778 if ((yyvsp[(1) - (2)].interm).op != EOpNull) { |
|
2779 (yyval.interm.intermTypedNode) = context->intermediate.addUnaryMath((yyvsp[(1) - (2)].interm).op, (yyvsp[(2) - (2)].interm.intermTypedNode), (yylsp[(1) - (2)]), context->symbolTable); |
|
2780 if ((yyval.interm.intermTypedNode) == 0) { |
|
2781 const char* errorOp = ""; |
|
2782 switch((yyvsp[(1) - (2)].interm).op) { |
|
2783 case EOpNegative: errorOp = "-"; break; |
|
2784 case EOpLogicalNot: errorOp = "!"; break; |
|
2785 default: break; |
|
2786 } |
|
2787 context->unaryOpError((yylsp[(1) - (2)]), errorOp, (yyvsp[(2) - (2)].interm.intermTypedNode)->getCompleteString()); |
|
2788 context->recover(); |
|
2789 (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode); |
|
2790 } |
|
2791 } else |
|
2792 (yyval.interm.intermTypedNode) = (yyvsp[(2) - (2)].interm.intermTypedNode); |
|
2793 } |
|
2794 break; |
|
2795 |
|
2796 case 33: |
|
2797 |
|
2798 { (yyval.interm).op = EOpNull; } |
|
2799 break; |
|
2800 |
|
2801 case 34: |
|
2802 |
|
2803 { (yyval.interm).op = EOpNegative; } |
|
2804 break; |
|
2805 |
|
2806 case 35: |
|
2807 |
|
2808 { (yyval.interm).op = EOpLogicalNot; } |
|
2809 break; |
|
2810 |
|
2811 case 36: |
|
2812 |
|
2813 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2814 break; |
|
2815 |
|
2816 case 37: |
|
2817 |
|
2818 { |
|
2819 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpMul, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2820 if ((yyval.interm.intermTypedNode) == 0) { |
|
2821 context->binaryOpError((yylsp[(2) - (3)]), "*", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2822 context->recover(); |
|
2823 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2824 } |
|
2825 } |
|
2826 break; |
|
2827 |
|
2828 case 38: |
|
2829 |
|
2830 { |
|
2831 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpDiv, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2832 if ((yyval.interm.intermTypedNode) == 0) { |
|
2833 context->binaryOpError((yylsp[(2) - (3)]), "/", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2834 context->recover(); |
|
2835 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2836 } |
|
2837 } |
|
2838 break; |
|
2839 |
|
2840 case 39: |
|
2841 |
|
2842 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2843 break; |
|
2844 |
|
2845 case 40: |
|
2846 |
|
2847 { |
|
2848 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2849 if ((yyval.interm.intermTypedNode) == 0) { |
|
2850 context->binaryOpError((yylsp[(2) - (3)]), "+", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2851 context->recover(); |
|
2852 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2853 } |
|
2854 } |
|
2855 break; |
|
2856 |
|
2857 case 41: |
|
2858 |
|
2859 { |
|
2860 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2861 if ((yyval.interm.intermTypedNode) == 0) { |
|
2862 context->binaryOpError((yylsp[(2) - (3)]), "-", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2863 context->recover(); |
|
2864 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
2865 } |
|
2866 } |
|
2867 break; |
|
2868 |
|
2869 case 42: |
|
2870 |
|
2871 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2872 break; |
|
2873 |
|
2874 case 43: |
|
2875 |
|
2876 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2877 break; |
|
2878 |
|
2879 case 44: |
|
2880 |
|
2881 { |
|
2882 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2883 if ((yyval.interm.intermTypedNode) == 0) { |
|
2884 context->binaryOpError((yylsp[(2) - (3)]), "<", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2885 context->recover(); |
|
2886 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2887 unionArray->setBConst(false); |
|
2888 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2889 } |
|
2890 } |
|
2891 break; |
|
2892 |
|
2893 case 45: |
|
2894 |
|
2895 { |
|
2896 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2897 if ((yyval.interm.intermTypedNode) == 0) { |
|
2898 context->binaryOpError((yylsp[(2) - (3)]), ">", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2899 context->recover(); |
|
2900 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2901 unionArray->setBConst(false); |
|
2902 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2903 } |
|
2904 } |
|
2905 break; |
|
2906 |
|
2907 case 46: |
|
2908 |
|
2909 { |
|
2910 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2911 if ((yyval.interm.intermTypedNode) == 0) { |
|
2912 context->binaryOpError((yylsp[(2) - (3)]), "<=", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2913 context->recover(); |
|
2914 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2915 unionArray->setBConst(false); |
|
2916 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2917 } |
|
2918 } |
|
2919 break; |
|
2920 |
|
2921 case 47: |
|
2922 |
|
2923 { |
|
2924 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2925 if ((yyval.interm.intermTypedNode) == 0) { |
|
2926 context->binaryOpError((yylsp[(2) - (3)]), ">=", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2927 context->recover(); |
|
2928 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2929 unionArray->setBConst(false); |
|
2930 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2931 } |
|
2932 } |
|
2933 break; |
|
2934 |
|
2935 case 48: |
|
2936 |
|
2937 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2938 break; |
|
2939 |
|
2940 case 49: |
|
2941 |
|
2942 { |
|
2943 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2944 if ((yyval.interm.intermTypedNode) == 0) { |
|
2945 context->binaryOpError((yylsp[(2) - (3)]), "==", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2946 context->recover(); |
|
2947 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2948 unionArray->setBConst(false); |
|
2949 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2950 } |
|
2951 } |
|
2952 break; |
|
2953 |
|
2954 case 50: |
|
2955 |
|
2956 { |
|
2957 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2958 if ((yyval.interm.intermTypedNode) == 0) { |
|
2959 context->binaryOpError((yylsp[(2) - (3)]), "!=", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2960 context->recover(); |
|
2961 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2962 unionArray->setBConst(false); |
|
2963 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2964 } |
|
2965 } |
|
2966 break; |
|
2967 |
|
2968 case 51: |
|
2969 |
|
2970 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2971 break; |
|
2972 |
|
2973 case 52: |
|
2974 |
|
2975 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2976 break; |
|
2977 |
|
2978 case 53: |
|
2979 |
|
2980 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2981 break; |
|
2982 |
|
2983 case 54: |
|
2984 |
|
2985 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
2986 break; |
|
2987 |
|
2988 case 55: |
|
2989 |
|
2990 { |
|
2991 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
2992 if ((yyval.interm.intermTypedNode) == 0) { |
|
2993 context->binaryOpError((yylsp[(2) - (3)]), "&&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
2994 context->recover(); |
|
2995 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
2996 unionArray->setBConst(false); |
|
2997 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
2998 } |
|
2999 } |
|
3000 break; |
|
3001 |
|
3002 case 56: |
|
3003 |
|
3004 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
3005 break; |
|
3006 |
|
3007 case 57: |
|
3008 |
|
3009 { |
|
3010 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
3011 if ((yyval.interm.intermTypedNode) == 0) { |
|
3012 context->binaryOpError((yylsp[(2) - (3)]), "^^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
3013 context->recover(); |
|
3014 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
3015 unionArray->setBConst(false); |
|
3016 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
3017 } |
|
3018 } |
|
3019 break; |
|
3020 |
|
3021 case 58: |
|
3022 |
|
3023 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
3024 break; |
|
3025 |
|
3026 case 59: |
|
3027 |
|
3028 { |
|
3029 (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]), context->symbolTable); |
|
3030 if ((yyval.interm.intermTypedNode) == 0) { |
|
3031 context->binaryOpError((yylsp[(2) - (3)]), "||", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
3032 context->recover(); |
|
3033 ConstantUnion *unionArray = new ConstantUnion[1]; |
|
3034 unionArray->setBConst(false); |
|
3035 (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConst), (yylsp[(2) - (3)])); |
|
3036 } |
|
3037 } |
|
3038 break; |
|
3039 |
|
3040 case 60: |
|
3041 |
|
3042 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
3043 break; |
|
3044 |
|
3045 case 61: |
|
3046 |
|
3047 { |
|
3048 if (context->boolErrorCheck((yylsp[(2) - (5)]), (yyvsp[(1) - (5)].interm.intermTypedNode))) |
|
3049 context->recover(); |
|
3050 |
|
3051 (yyval.interm.intermTypedNode) = context->intermediate.addSelection((yyvsp[(1) - (5)].interm.intermTypedNode), (yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.intermTypedNode), (yylsp[(2) - (5)])); |
|
3052 if ((yyvsp[(3) - (5)].interm.intermTypedNode)->getType() != (yyvsp[(5) - (5)].interm.intermTypedNode)->getType()) |
|
3053 (yyval.interm.intermTypedNode) = 0; |
|
3054 |
|
3055 if ((yyval.interm.intermTypedNode) == 0) { |
|
3056 context->binaryOpError((yylsp[(2) - (5)]), ":", (yyvsp[(3) - (5)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(5) - (5)].interm.intermTypedNode)->getCompleteString()); |
|
3057 context->recover(); |
|
3058 (yyval.interm.intermTypedNode) = (yyvsp[(5) - (5)].interm.intermTypedNode); |
|
3059 } |
|
3060 } |
|
3061 break; |
|
3062 |
|
3063 case 62: |
|
3064 |
|
3065 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
3066 break; |
|
3067 |
|
3068 case 63: |
|
3069 |
|
3070 { |
|
3071 if (context->lValueErrorCheck((yylsp[(2) - (3)]), "assign", (yyvsp[(1) - (3)].interm.intermTypedNode))) |
|
3072 context->recover(); |
|
3073 (yyval.interm.intermTypedNode) = context->intermediate.addAssign((yyvsp[(2) - (3)].interm).op, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)])); |
|
3074 if ((yyval.interm.intermTypedNode) == 0) { |
|
3075 context->assignError((yylsp[(2) - (3)]), "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
3076 context->recover(); |
|
3077 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
3078 } |
|
3079 } |
|
3080 break; |
|
3081 |
|
3082 case 64: |
|
3083 |
|
3084 { (yyval.interm).op = EOpAssign; } |
|
3085 break; |
|
3086 |
|
3087 case 65: |
|
3088 |
|
3089 { (yyval.interm).op = EOpMulAssign; } |
|
3090 break; |
|
3091 |
|
3092 case 66: |
|
3093 |
|
3094 { (yyval.interm).op = EOpDivAssign; } |
|
3095 break; |
|
3096 |
|
3097 case 67: |
|
3098 |
|
3099 { (yyval.interm).op = EOpAddAssign; } |
|
3100 break; |
|
3101 |
|
3102 case 68: |
|
3103 |
|
3104 { (yyval.interm).op = EOpSubAssign; } |
|
3105 break; |
|
3106 |
|
3107 case 69: |
|
3108 |
|
3109 { |
|
3110 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
3111 } |
|
3112 break; |
|
3113 |
|
3114 case 70: |
|
3115 |
|
3116 { |
|
3117 (yyval.interm.intermTypedNode) = context->intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)])); |
|
3118 if ((yyval.interm.intermTypedNode) == 0) { |
|
3119 context->binaryOpError((yylsp[(2) - (3)]), ",", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString()); |
|
3120 context->recover(); |
|
3121 (yyval.interm.intermTypedNode) = (yyvsp[(3) - (3)].interm.intermTypedNode); |
|
3122 } |
|
3123 } |
|
3124 break; |
|
3125 |
|
3126 case 71: |
|
3127 |
|
3128 { |
|
3129 if (context->constErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode))) |
|
3130 context->recover(); |
|
3131 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
3132 } |
|
3133 break; |
|
3134 |
|
3135 case 72: |
|
3136 |
|
3137 { |
|
3138 TFunction &function = *((yyvsp[(1) - (2)].interm).function); |
|
3139 |
|
3140 TIntermAggregate *prototype = new TIntermAggregate; |
|
3141 prototype->setType(function.getReturnType()); |
|
3142 prototype->setName(function.getName()); |
|
3143 |
|
3144 for (size_t i = 0; i < function.getParamCount(); i++) |
|
3145 { |
|
3146 const TParameter ¶m = function.getParam(i); |
|
3147 if (param.name != 0) |
|
3148 { |
|
3149 TVariable variable(param.name, *param.type); |
|
3150 |
|
3151 prototype = context->intermediate.growAggregate(prototype, context->intermediate.addSymbol(variable.getUniqueId(), variable.getName(), variable.getType(), (yylsp[(1) - (2)])), (yylsp[(1) - (2)])); |
|
3152 } |
|
3153 else |
|
3154 { |
|
3155 prototype = context->intermediate.growAggregate(prototype, context->intermediate.addSymbol(0, "", *param.type, (yylsp[(1) - (2)])), (yylsp[(1) - (2)])); |
|
3156 } |
|
3157 } |
|
3158 |
|
3159 prototype->setOp(EOpPrototype); |
|
3160 (yyval.interm.intermNode) = prototype; |
|
3161 |
|
3162 context->symbolTable.pop(); |
|
3163 } |
|
3164 break; |
|
3165 |
|
3166 case 73: |
|
3167 |
|
3168 { |
|
3169 if ((yyvsp[(1) - (2)].interm).intermAggregate) |
|
3170 (yyvsp[(1) - (2)].interm).intermAggregate->setOp(EOpDeclaration); |
|
3171 (yyval.interm.intermNode) = (yyvsp[(1) - (2)].interm).intermAggregate; |
|
3172 } |
|
3173 break; |
|
3174 |
|
3175 case 74: |
|
3176 |
|
3177 { |
|
3178 if (((yyvsp[(2) - (4)].interm.precision) == EbpHigh) && (context->shaderType == SH_FRAGMENT_SHADER) && !context->fragmentPrecisionHigh) { |
|
3179 context->error((yylsp[(1) - (4)]), "precision is not supported in fragment shader", "highp"); |
|
3180 context->recover(); |
|
3181 } |
|
3182 if (!context->symbolTable.setDefaultPrecision( (yyvsp[(3) - (4)].interm.type), (yyvsp[(2) - (4)].interm.precision) )) { |
|
3183 context->error((yylsp[(1) - (4)]), "illegal type argument for default precision qualifier", getBasicString((yyvsp[(3) - (4)].interm.type).type)); |
|
3184 context->recover(); |
|
3185 } |
|
3186 (yyval.interm.intermNode) = 0; |
|
3187 } |
|
3188 break; |
|
3189 |
|
3190 case 75: |
|
3191 |
|
3192 { |
|
3193 // |
|
3194 // Multiple declarations of the same function are allowed. |
|
3195 // |
|
3196 // If this is a definition, the definition production code will check for redefinitions |
|
3197 // (we don't know at this point if it's a definition or not). |
|
3198 // |
|
3199 // Redeclarations are allowed. But, return types and parameter qualifiers must match. |
|
3200 // |
|
3201 TFunction* prevDec = static_cast<TFunction*>(context->symbolTable.find((yyvsp[(1) - (2)].interm.function)->getMangledName())); |
|
3202 if (prevDec) { |
|
3203 if (prevDec->getReturnType() != (yyvsp[(1) - (2)].interm.function)->getReturnType()) { |
|
3204 context->error((yylsp[(2) - (2)]), "overloaded functions must have the same return type", (yyvsp[(1) - (2)].interm.function)->getReturnType().getBasicString()); |
|
3205 context->recover(); |
|
3206 } |
|
3207 for (size_t i = 0; i < prevDec->getParamCount(); ++i) { |
|
3208 if (prevDec->getParam(i).type->getQualifier() != (yyvsp[(1) - (2)].interm.function)->getParam(i).type->getQualifier()) { |
|
3209 context->error((yylsp[(2) - (2)]), "overloaded functions must have the same parameter qualifiers", (yyvsp[(1) - (2)].interm.function)->getParam(i).type->getQualifierString()); |
|
3210 context->recover(); |
|
3211 } |
|
3212 } |
|
3213 } |
|
3214 |
|
3215 // |
|
3216 // Check for previously declared variables using the same name. |
|
3217 // |
|
3218 TSymbol *prevSym = context->symbolTable.find((yyvsp[(1) - (2)].interm.function)->getName()); |
|
3219 if (prevSym) |
|
3220 { |
|
3221 if (!prevSym->isFunction()) |
|
3222 { |
|
3223 context->error((yylsp[(2) - (2)]), "redefinition", (yyvsp[(1) - (2)].interm.function)->getName().c_str(), "function"); |
|
3224 context->recover(); |
|
3225 } |
|
3226 } |
|
3227 else |
|
3228 { |
|
3229 // Insert the unmangled name to detect potential future redefinition as a variable. |
|
3230 context->symbolTable.getOuterLevel()->insert((yyvsp[(1) - (2)].interm.function)->getName(), *(yyvsp[(1) - (2)].interm.function)); |
|
3231 } |
|
3232 |
|
3233 // |
|
3234 // If this is a redeclaration, it could also be a definition, |
|
3235 // in which case, we want to use the variable names from this one, and not the one that's |
|
3236 // being redeclared. So, pass back up this declaration, not the one in the symbol table. |
|
3237 // |
|
3238 (yyval.interm).function = (yyvsp[(1) - (2)].interm.function); |
|
3239 |
|
3240 // We're at the inner scope level of the function's arguments and body statement. |
|
3241 // Add the function prototype to the surrounding scope instead. |
|
3242 context->symbolTable.getOuterLevel()->insert(*(yyval.interm).function); |
|
3243 } |
|
3244 break; |
|
3245 |
|
3246 case 76: |
|
3247 |
|
3248 { |
|
3249 (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function); |
|
3250 } |
|
3251 break; |
|
3252 |
|
3253 case 77: |
|
3254 |
|
3255 { |
|
3256 (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function); |
|
3257 } |
|
3258 break; |
|
3259 |
|
3260 case 78: |
|
3261 |
|
3262 { |
|
3263 // Add the parameter |
|
3264 (yyval.interm.function) = (yyvsp[(1) - (2)].interm.function); |
|
3265 if ((yyvsp[(2) - (2)].interm).param.type->getBasicType() != EbtVoid) |
|
3266 (yyvsp[(1) - (2)].interm.function)->addParameter((yyvsp[(2) - (2)].interm).param); |
|
3267 else |
|
3268 delete (yyvsp[(2) - (2)].interm).param.type; |
|
3269 } |
|
3270 break; |
|
3271 |
|
3272 case 79: |
|
3273 |
|
3274 { |
|
3275 // |
|
3276 // Only first parameter of one-parameter functions can be void |
|
3277 // The check for named parameters not being void is done in parameter_declarator |
|
3278 // |
|
3279 if ((yyvsp[(3) - (3)].interm).param.type->getBasicType() == EbtVoid) { |
|
3280 // |
|
3281 // This parameter > first is void |
|
3282 // |
|
3283 context->error((yylsp[(2) - (3)]), "cannot be an argument type except for '(void)'", "void"); |
|
3284 context->recover(); |
|
3285 delete (yyvsp[(3) - (3)].interm).param.type; |
|
3286 } else { |
|
3287 // Add the parameter |
|
3288 (yyval.interm.function) = (yyvsp[(1) - (3)].interm.function); |
|
3289 (yyvsp[(1) - (3)].interm.function)->addParameter((yyvsp[(3) - (3)].interm).param); |
|
3290 } |
|
3291 } |
|
3292 break; |
|
3293 |
|
3294 case 80: |
|
3295 |
|
3296 { |
|
3297 if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) { |
|
3298 context->error((yylsp[(2) - (3)]), "no qualifiers allowed for function return", getQualifierString((yyvsp[(1) - (3)].interm.type).qualifier)); |
|
3299 context->recover(); |
|
3300 } |
|
3301 // make sure a sampler is not involved as well... |
|
3302 if (context->structQualifierErrorCheck((yylsp[(2) - (3)]), (yyvsp[(1) - (3)].interm.type))) |
|
3303 context->recover(); |
|
3304 |
|
3305 // Add the function as a prototype after parsing it (we do not support recursion) |
|
3306 TFunction *function; |
|
3307 TType type((yyvsp[(1) - (3)].interm.type)); |
|
3308 function = new TFunction((yyvsp[(2) - (3)].lex).string, type); |
|
3309 (yyval.interm.function) = function; |
|
3310 |
|
3311 context->symbolTable.push(); |
|
3312 } |
|
3313 break; |
|
3314 |
|
3315 case 81: |
|
3316 |
|
3317 { |
|
3318 if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) { |
|
3319 context->error((yylsp[(2) - (2)]), "illegal use of type 'void'", (yyvsp[(2) - (2)].lex).string->c_str()); |
|
3320 context->recover(); |
|
3321 } |
|
3322 if (context->reservedErrorCheck((yylsp[(2) - (2)]), *(yyvsp[(2) - (2)].lex).string)) |
|
3323 context->recover(); |
|
3324 TParameter param = {(yyvsp[(2) - (2)].lex).string, new TType((yyvsp[(1) - (2)].interm.type))}; |
|
3325 (yyval.interm).param = param; |
|
3326 } |
|
3327 break; |
|
3328 |
|
3329 case 82: |
|
3330 |
|
3331 { |
|
3332 // Check that we can make an array out of this type |
|
3333 if (context->arrayTypeErrorCheck((yylsp[(3) - (5)]), (yyvsp[(1) - (5)].interm.type))) |
|
3334 context->recover(); |
|
3335 |
|
3336 if (context->reservedErrorCheck((yylsp[(2) - (5)]), *(yyvsp[(2) - (5)].lex).string)) |
|
3337 context->recover(); |
|
3338 |
|
3339 int size; |
|
3340 if (context->arraySizeErrorCheck((yylsp[(3) - (5)]), (yyvsp[(4) - (5)].interm.intermTypedNode), size)) |
|
3341 context->recover(); |
|
3342 (yyvsp[(1) - (5)].interm.type).setArray(true, size); |
|
3343 |
|
3344 TType* type = new TType((yyvsp[(1) - (5)].interm.type)); |
|
3345 TParameter param = { (yyvsp[(2) - (5)].lex).string, type }; |
|
3346 (yyval.interm).param = param; |
|
3347 } |
|
3348 break; |
|
3349 |
|
3350 case 83: |
|
3351 |
|
3352 { |
|
3353 (yyval.interm) = (yyvsp[(3) - (3)].interm); |
|
3354 if (context->paramErrorCheck((yylsp[(3) - (3)]), (yyvsp[(1) - (3)].interm.type).qualifier, (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type)) |
|
3355 context->recover(); |
|
3356 } |
|
3357 break; |
|
3358 |
|
3359 case 84: |
|
3360 |
|
3361 { |
|
3362 (yyval.interm) = (yyvsp[(2) - (2)].interm); |
|
3363 if (context->parameterSamplerErrorCheck((yylsp[(2) - (2)]), (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type)) |
|
3364 context->recover(); |
|
3365 if (context->paramErrorCheck((yylsp[(2) - (2)]), EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type)) |
|
3366 context->recover(); |
|
3367 } |
|
3368 break; |
|
3369 |
|
3370 case 85: |
|
3371 |
|
3372 { |
|
3373 (yyval.interm) = (yyvsp[(3) - (3)].interm); |
|
3374 if (context->paramErrorCheck((yylsp[(3) - (3)]), (yyvsp[(1) - (3)].interm.type).qualifier, (yyvsp[(2) - (3)].interm.qualifier), (yyval.interm).param.type)) |
|
3375 context->recover(); |
|
3376 } |
|
3377 break; |
|
3378 |
|
3379 case 86: |
|
3380 |
|
3381 { |
|
3382 (yyval.interm) = (yyvsp[(2) - (2)].interm); |
|
3383 if (context->parameterSamplerErrorCheck((yylsp[(2) - (2)]), (yyvsp[(1) - (2)].interm.qualifier), *(yyvsp[(2) - (2)].interm).param.type)) |
|
3384 context->recover(); |
|
3385 if (context->paramErrorCheck((yylsp[(2) - (2)]), EvqTemporary, (yyvsp[(1) - (2)].interm.qualifier), (yyval.interm).param.type)) |
|
3386 context->recover(); |
|
3387 } |
|
3388 break; |
|
3389 |
|
3390 case 87: |
|
3391 |
|
3392 { |
|
3393 (yyval.interm.qualifier) = EvqIn; |
|
3394 } |
|
3395 break; |
|
3396 |
|
3397 case 88: |
|
3398 |
|
3399 { |
|
3400 (yyval.interm.qualifier) = EvqIn; |
|
3401 } |
|
3402 break; |
|
3403 |
|
3404 case 89: |
|
3405 |
|
3406 { |
|
3407 (yyval.interm.qualifier) = EvqOut; |
|
3408 } |
|
3409 break; |
|
3410 |
|
3411 case 90: |
|
3412 |
|
3413 { |
|
3414 (yyval.interm.qualifier) = EvqInOut; |
|
3415 } |
|
3416 break; |
|
3417 |
|
3418 case 91: |
|
3419 |
|
3420 { |
|
3421 TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) }; |
|
3422 (yyval.interm).param = param; |
|
3423 } |
|
3424 break; |
|
3425 |
|
3426 case 92: |
|
3427 |
|
3428 { |
|
3429 (yyval.interm) = (yyvsp[(1) - (1)].interm); |
|
3430 } |
|
3431 break; |
|
3432 |
|
3433 case 93: |
|
3434 |
|
3435 { |
|
3436 if ((yyvsp[(1) - (3)].interm).type.type == EbtInvariant && !(yyvsp[(3) - (3)].lex).symbol) |
|
3437 { |
|
3438 context->error((yylsp[(3) - (3)]), "undeclared identifier declared as invariant", (yyvsp[(3) - (3)].lex).string->c_str()); |
|
3439 context->recover(); |
|
3440 } |
|
3441 |
|
3442 TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(3) - (3)].lex).string, TType((yyvsp[(1) - (3)].interm).type), (yylsp[(3) - (3)])); |
|
3443 (yyval.interm).intermAggregate = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermNode, symbol, (yylsp[(3) - (3)])); |
|
3444 |
|
3445 if (context->structQualifierErrorCheck((yylsp[(3) - (3)]), (yyval.interm).type)) |
|
3446 context->recover(); |
|
3447 |
|
3448 if (context->nonInitConstErrorCheck((yylsp[(3) - (3)]), *(yyvsp[(3) - (3)].lex).string, (yyval.interm).type, false)) |
|
3449 context->recover(); |
|
3450 |
|
3451 TVariable* variable = 0; |
|
3452 if (context->nonInitErrorCheck((yylsp[(3) - (3)]), *(yyvsp[(3) - (3)].lex).string, (yyval.interm).type, variable)) |
|
3453 context->recover(); |
|
3454 if (symbol && variable) |
|
3455 symbol->setId(variable->getUniqueId()); |
|
3456 } |
|
3457 break; |
|
3458 |
|
3459 case 94: |
|
3460 |
|
3461 { |
|
3462 if (context->structQualifierErrorCheck((yylsp[(3) - (5)]), (yyvsp[(1) - (5)].interm).type)) |
|
3463 context->recover(); |
|
3464 |
|
3465 if (context->nonInitConstErrorCheck((yylsp[(3) - (5)]), *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, true)) |
|
3466 context->recover(); |
|
3467 |
|
3468 (yyval.interm) = (yyvsp[(1) - (5)].interm); |
|
3469 |
|
3470 if (context->arrayTypeErrorCheck((yylsp[(4) - (5)]), (yyvsp[(1) - (5)].interm).type) || context->arrayQualifierErrorCheck((yylsp[(4) - (5)]), (yyvsp[(1) - (5)].interm).type)) |
|
3471 context->recover(); |
|
3472 else { |
|
3473 (yyvsp[(1) - (5)].interm).type.setArray(true); |
|
3474 TVariable* variable; |
|
3475 if (context->arrayErrorCheck((yylsp[(4) - (5)]), *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, variable)) |
|
3476 context->recover(); |
|
3477 } |
|
3478 } |
|
3479 break; |
|
3480 |
|
3481 case 95: |
|
3482 |
|
3483 { |
|
3484 if (context->structQualifierErrorCheck((yylsp[(3) - (6)]), (yyvsp[(1) - (6)].interm).type)) |
|
3485 context->recover(); |
|
3486 |
|
3487 if (context->nonInitConstErrorCheck((yylsp[(3) - (6)]), *(yyvsp[(3) - (6)].lex).string, (yyvsp[(1) - (6)].interm).type, true)) |
|
3488 context->recover(); |
|
3489 |
|
3490 (yyval.interm) = (yyvsp[(1) - (6)].interm); |
|
3491 |
|
3492 if (context->arrayTypeErrorCheck((yylsp[(4) - (6)]), (yyvsp[(1) - (6)].interm).type) || context->arrayQualifierErrorCheck((yylsp[(4) - (6)]), (yyvsp[(1) - (6)].interm).type)) |
|
3493 context->recover(); |
|
3494 else { |
|
3495 int size; |
|
3496 if (context->arraySizeErrorCheck((yylsp[(4) - (6)]), (yyvsp[(5) - (6)].interm.intermTypedNode), size)) |
|
3497 context->recover(); |
|
3498 (yyvsp[(1) - (6)].interm).type.setArray(true, size); |
|
3499 TVariable* variable = 0; |
|
3500 if (context->arrayErrorCheck((yylsp[(4) - (6)]), *(yyvsp[(3) - (6)].lex).string, (yyvsp[(1) - (6)].interm).type, variable)) |
|
3501 context->recover(); |
|
3502 TType type = TType((yyvsp[(1) - (6)].interm).type); |
|
3503 type.setArraySize(size); |
|
3504 (yyval.interm).intermAggregate = context->intermediate.growAggregate((yyvsp[(1) - (6)].interm).intermNode, context->intermediate.addSymbol(variable ? variable->getUniqueId() : 0, *(yyvsp[(3) - (6)].lex).string, type, (yylsp[(3) - (6)])), (yylsp[(3) - (6)])); |
|
3505 } |
|
3506 } |
|
3507 break; |
|
3508 |
|
3509 case 96: |
|
3510 |
|
3511 { |
|
3512 if (context->structQualifierErrorCheck((yylsp[(3) - (5)]), (yyvsp[(1) - (5)].interm).type)) |
|
3513 context->recover(); |
|
3514 |
|
3515 (yyval.interm) = (yyvsp[(1) - (5)].interm); |
|
3516 |
|
3517 TIntermNode* intermNode; |
|
3518 if (!context->executeInitializer((yylsp[(3) - (5)]), *(yyvsp[(3) - (5)].lex).string, (yyvsp[(1) - (5)].interm).type, (yyvsp[(5) - (5)].interm.intermTypedNode), intermNode)) { |
|
3519 // |
|
3520 // build the intermediate representation |
|
3521 // |
|
3522 if (intermNode) |
|
3523 (yyval.interm).intermAggregate = context->intermediate.growAggregate((yyvsp[(1) - (5)].interm).intermNode, intermNode, (yylsp[(4) - (5)])); |
|
3524 else |
|
3525 (yyval.interm).intermAggregate = (yyvsp[(1) - (5)].interm).intermAggregate; |
|
3526 } else { |
|
3527 context->recover(); |
|
3528 (yyval.interm).intermAggregate = 0; |
|
3529 } |
|
3530 } |
|
3531 break; |
|
3532 |
|
3533 case 97: |
|
3534 |
|
3535 { |
|
3536 (yyval.interm).type = (yyvsp[(1) - (1)].interm.type); |
|
3537 (yyval.interm).intermAggregate = context->intermediate.makeAggregate(context->intermediate.addSymbol(0, "", TType((yyvsp[(1) - (1)].interm.type)), (yylsp[(1) - (1)])), (yylsp[(1) - (1)])); |
|
3538 } |
|
3539 break; |
|
3540 |
|
3541 case 98: |
|
3542 |
|
3543 { |
|
3544 TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyvsp[(1) - (2)].interm.type)), (yylsp[(2) - (2)])); |
|
3545 (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yylsp[(2) - (2)])); |
|
3546 |
|
3547 if (context->structQualifierErrorCheck((yylsp[(2) - (2)]), (yyval.interm).type)) |
|
3548 context->recover(); |
|
3549 |
|
3550 if (context->nonInitConstErrorCheck((yylsp[(2) - (2)]), *(yyvsp[(2) - (2)].lex).string, (yyval.interm).type, false)) |
|
3551 context->recover(); |
|
3552 |
|
3553 (yyval.interm).type = (yyvsp[(1) - (2)].interm.type); |
|
3554 |
|
3555 TVariable* variable = 0; |
|
3556 if (context->nonInitErrorCheck((yylsp[(2) - (2)]), *(yyvsp[(2) - (2)].lex).string, (yyval.interm).type, variable)) |
|
3557 context->recover(); |
|
3558 if (variable && symbol) |
|
3559 symbol->setId(variable->getUniqueId()); |
|
3560 } |
|
3561 break; |
|
3562 |
|
3563 case 99: |
|
3564 |
|
3565 { |
|
3566 context->error((yylsp[(2) - (4)]), "unsized array declarations not supported", (yyvsp[(2) - (4)].lex).string->c_str()); |
|
3567 context->recover(); |
|
3568 |
|
3569 TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (4)].lex).string, TType((yyvsp[(1) - (4)].interm.type)), (yylsp[(2) - (4)])); |
|
3570 (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yylsp[(2) - (4)])); |
|
3571 (yyval.interm).type = (yyvsp[(1) - (4)].interm.type); |
|
3572 } |
|
3573 break; |
|
3574 |
|
3575 case 100: |
|
3576 |
|
3577 { |
|
3578 TType type = TType((yyvsp[(1) - (5)].interm.type)); |
|
3579 int size; |
|
3580 if (context->arraySizeErrorCheck((yylsp[(2) - (5)]), (yyvsp[(4) - (5)].interm.intermTypedNode), size)) |
|
3581 context->recover(); |
|
3582 type.setArraySize(size); |
|
3583 TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (5)].lex).string, type, (yylsp[(2) - (5)])); |
|
3584 (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yylsp[(2) - (5)])); |
|
3585 |
|
3586 if (context->structQualifierErrorCheck((yylsp[(2) - (5)]), (yyvsp[(1) - (5)].interm.type))) |
|
3587 context->recover(); |
|
3588 |
|
3589 if (context->nonInitConstErrorCheck((yylsp[(2) - (5)]), *(yyvsp[(2) - (5)].lex).string, (yyvsp[(1) - (5)].interm.type), true)) |
|
3590 context->recover(); |
|
3591 |
|
3592 (yyval.interm).type = (yyvsp[(1) - (5)].interm.type); |
|
3593 |
|
3594 if (context->arrayTypeErrorCheck((yylsp[(3) - (5)]), (yyvsp[(1) - (5)].interm.type)) || context->arrayQualifierErrorCheck((yylsp[(3) - (5)]), (yyvsp[(1) - (5)].interm.type))) |
|
3595 context->recover(); |
|
3596 else { |
|
3597 int size; |
|
3598 if (context->arraySizeErrorCheck((yylsp[(3) - (5)]), (yyvsp[(4) - (5)].interm.intermTypedNode), size)) |
|
3599 context->recover(); |
|
3600 |
|
3601 (yyvsp[(1) - (5)].interm.type).setArray(true, size); |
|
3602 TVariable* variable = 0; |
|
3603 if (context->arrayErrorCheck((yylsp[(3) - (5)]), *(yyvsp[(2) - (5)].lex).string, (yyvsp[(1) - (5)].interm.type), variable)) |
|
3604 context->recover(); |
|
3605 if (variable && symbol) |
|
3606 symbol->setId(variable->getUniqueId()); |
|
3607 } |
|
3608 } |
|
3609 break; |
|
3610 |
|
3611 case 101: |
|
3612 |
|
3613 { |
|
3614 if (context->structQualifierErrorCheck((yylsp[(2) - (4)]), (yyvsp[(1) - (4)].interm.type))) |
|
3615 context->recover(); |
|
3616 |
|
3617 (yyval.interm).type = (yyvsp[(1) - (4)].interm.type); |
|
3618 |
|
3619 TIntermNode* intermNode; |
|
3620 if (!context->executeInitializer((yylsp[(2) - (4)]), *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), (yyvsp[(4) - (4)].interm.intermTypedNode), intermNode)) { |
|
3621 // |
|
3622 // Build intermediate representation |
|
3623 // |
|
3624 if(intermNode) |
|
3625 (yyval.interm).intermAggregate = context->intermediate.makeAggregate(intermNode, (yylsp[(3) - (4)])); |
|
3626 else |
|
3627 (yyval.interm).intermAggregate = 0; |
|
3628 } else { |
|
3629 context->recover(); |
|
3630 (yyval.interm).intermAggregate = 0; |
|
3631 } |
|
3632 } |
|
3633 break; |
|
3634 |
|
3635 case 102: |
|
3636 |
|
3637 { |
|
3638 VERTEX_ONLY("invariant declaration", (yylsp[(1) - (2)])); |
|
3639 if (context->globalErrorCheck((yylsp[(1) - (2)]), context->symbolTable.atGlobalLevel(), "invariant varying")) |
|
3640 context->recover(); |
|
3641 (yyval.interm).type.setBasic(EbtInvariant, EvqInvariantVaryingOut, (yylsp[(2) - (2)])); |
|
3642 if (!(yyvsp[(2) - (2)].lex).symbol) |
|
3643 { |
|
3644 context->error((yylsp[(2) - (2)]), "undeclared identifier declared as invariant", (yyvsp[(2) - (2)].lex).string->c_str()); |
|
3645 context->recover(); |
|
3646 |
|
3647 (yyval.interm).intermAggregate = 0; |
|
3648 } |
|
3649 else |
|
3650 { |
|
3651 TIntermSymbol *symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyval.interm).type), (yylsp[(2) - (2)])); |
|
3652 (yyval.interm).intermAggregate = context->intermediate.makeAggregate(symbol, (yylsp[(2) - (2)])); |
|
3653 } |
|
3654 } |
|
3655 break; |
|
3656 |
|
3657 case 103: |
|
3658 |
|
3659 { |
|
3660 (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); |
|
3661 |
|
3662 if ((yyvsp[(1) - (1)].interm.type).array) { |
|
3663 context->error((yylsp[(1) - (1)]), "not supported", "first-class array"); |
|
3664 context->recover(); |
|
3665 (yyvsp[(1) - (1)].interm.type).setArray(false); |
|
3666 } |
|
3667 } |
|
3668 break; |
|
3669 |
|
3670 case 104: |
|
3671 |
|
3672 { |
|
3673 if ((yyvsp[(2) - (2)].interm.type).array) { |
|
3674 context->error((yylsp[(2) - (2)]), "not supported", "first-class array"); |
|
3675 context->recover(); |
|
3676 (yyvsp[(2) - (2)].interm.type).setArray(false); |
|
3677 } |
|
3678 |
|
3679 if ((yyvsp[(1) - (2)].interm.type).qualifier == EvqAttribute && |
|
3680 ((yyvsp[(2) - (2)].interm.type).type == EbtBool || (yyvsp[(2) - (2)].interm.type).type == EbtInt)) { |
|
3681 context->error((yylsp[(2) - (2)]), "cannot be bool or int", getQualifierString((yyvsp[(1) - (2)].interm.type).qualifier)); |
|
3682 context->recover(); |
|
3683 } |
|
3684 if (((yyvsp[(1) - (2)].interm.type).qualifier == EvqVaryingIn || (yyvsp[(1) - (2)].interm.type).qualifier == EvqVaryingOut) && |
|
3685 ((yyvsp[(2) - (2)].interm.type).type == EbtBool || (yyvsp[(2) - (2)].interm.type).type == EbtInt)) { |
|
3686 context->error((yylsp[(2) - (2)]), "cannot be bool or int", getQualifierString((yyvsp[(1) - (2)].interm.type).qualifier)); |
|
3687 context->recover(); |
|
3688 } |
|
3689 (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type); |
|
3690 (yyval.interm.type).qualifier = (yyvsp[(1) - (2)].interm.type).qualifier; |
|
3691 } |
|
3692 break; |
|
3693 |
|
3694 case 105: |
|
3695 |
|
3696 { |
|
3697 (yyval.interm.type).setBasic(EbtVoid, EvqConst, (yylsp[(1) - (1)])); |
|
3698 } |
|
3699 break; |
|
3700 |
|
3701 case 106: |
|
3702 |
|
3703 { |
|
3704 VERTEX_ONLY("attribute", (yylsp[(1) - (1)])); |
|
3705 if (context->globalErrorCheck((yylsp[(1) - (1)]), context->symbolTable.atGlobalLevel(), "attribute")) |
|
3706 context->recover(); |
|
3707 (yyval.interm.type).setBasic(EbtVoid, EvqAttribute, (yylsp[(1) - (1)])); |
|
3708 } |
|
3709 break; |
|
3710 |
|
3711 case 107: |
|
3712 |
|
3713 { |
|
3714 if (context->globalErrorCheck((yylsp[(1) - (1)]), context->symbolTable.atGlobalLevel(), "varying")) |
|
3715 context->recover(); |
|
3716 if (context->shaderType == SH_VERTEX_SHADER) |
|
3717 (yyval.interm.type).setBasic(EbtVoid, EvqVaryingOut, (yylsp[(1) - (1)])); |
|
3718 else |
|
3719 (yyval.interm.type).setBasic(EbtVoid, EvqVaryingIn, (yylsp[(1) - (1)])); |
|
3720 } |
|
3721 break; |
|
3722 |
|
3723 case 108: |
|
3724 |
|
3725 { |
|
3726 if (context->globalErrorCheck((yylsp[(1) - (2)]), context->symbolTable.atGlobalLevel(), "invariant varying")) |
|
3727 context->recover(); |
|
3728 if (context->shaderType == SH_VERTEX_SHADER) |
|
3729 (yyval.interm.type).setBasic(EbtVoid, EvqInvariantVaryingOut, (yylsp[(1) - (2)])); |
|
3730 else |
|
3731 (yyval.interm.type).setBasic(EbtVoid, EvqInvariantVaryingIn, (yylsp[(1) - (2)])); |
|
3732 } |
|
3733 break; |
|
3734 |
|
3735 case 109: |
|
3736 |
|
3737 { |
|
3738 if (context->globalErrorCheck((yylsp[(1) - (1)]), context->symbolTable.atGlobalLevel(), "uniform")) |
|
3739 context->recover(); |
|
3740 (yyval.interm.type).setBasic(EbtVoid, EvqUniform, (yylsp[(1) - (1)])); |
|
3741 } |
|
3742 break; |
|
3743 |
|
3744 case 110: |
|
3745 |
|
3746 { |
|
3747 (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); |
|
3748 |
|
3749 if ((yyval.interm.type).precision == EbpUndefined) { |
|
3750 (yyval.interm.type).precision = context->symbolTable.getDefaultPrecision((yyvsp[(1) - (1)].interm.type).type); |
|
3751 if (context->precisionErrorCheck((yylsp[(1) - (1)]), (yyval.interm.type).precision, (yyvsp[(1) - (1)].interm.type).type)) { |
|
3752 context->recover(); |
|
3753 } |
|
3754 } |
|
3755 } |
|
3756 break; |
|
3757 |
|
3758 case 111: |
|
3759 |
|
3760 { |
|
3761 (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type); |
|
3762 (yyval.interm.type).precision = (yyvsp[(1) - (2)].interm.precision); |
|
3763 } |
|
3764 break; |
|
3765 |
|
3766 case 112: |
|
3767 |
|
3768 { |
|
3769 (yyval.interm.precision) = EbpHigh; |
|
3770 } |
|
3771 break; |
|
3772 |
|
3773 case 113: |
|
3774 |
|
3775 { |
|
3776 (yyval.interm.precision) = EbpMedium; |
|
3777 } |
|
3778 break; |
|
3779 |
|
3780 case 114: |
|
3781 |
|
3782 { |
|
3783 (yyval.interm.precision) = EbpLow; |
|
3784 } |
|
3785 break; |
|
3786 |
|
3787 case 115: |
|
3788 |
|
3789 { |
|
3790 (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); |
|
3791 } |
|
3792 break; |
|
3793 |
|
3794 case 116: |
|
3795 |
|
3796 { |
|
3797 (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type); |
|
3798 |
|
3799 if (context->arrayTypeErrorCheck((yylsp[(2) - (4)]), (yyvsp[(1) - (4)].interm.type))) |
|
3800 context->recover(); |
|
3801 else { |
|
3802 int size; |
|
3803 if (context->arraySizeErrorCheck((yylsp[(2) - (4)]), (yyvsp[(3) - (4)].interm.intermTypedNode), size)) |
|
3804 context->recover(); |
|
3805 (yyval.interm.type).setArray(true, size); |
|
3806 } |
|
3807 } |
|
3808 break; |
|
3809 |
|
3810 case 117: |
|
3811 |
|
3812 { |
|
3813 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3814 (yyval.interm.type).setBasic(EbtVoid, qual, (yylsp[(1) - (1)])); |
|
3815 } |
|
3816 break; |
|
3817 |
|
3818 case 118: |
|
3819 |
|
3820 { |
|
3821 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3822 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3823 } |
|
3824 break; |
|
3825 |
|
3826 case 119: |
|
3827 |
|
3828 { |
|
3829 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3830 (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[(1) - (1)])); |
|
3831 } |
|
3832 break; |
|
3833 |
|
3834 case 120: |
|
3835 |
|
3836 { |
|
3837 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3838 (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[(1) - (1)])); |
|
3839 } |
|
3840 break; |
|
3841 |
|
3842 case 121: |
|
3843 |
|
3844 { |
|
3845 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3846 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3847 (yyval.interm.type).setAggregate(2); |
|
3848 } |
|
3849 break; |
|
3850 |
|
3851 case 122: |
|
3852 |
|
3853 { |
|
3854 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3855 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3856 (yyval.interm.type).setAggregate(3); |
|
3857 } |
|
3858 break; |
|
3859 |
|
3860 case 123: |
|
3861 |
|
3862 { |
|
3863 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3864 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3865 (yyval.interm.type).setAggregate(4); |
|
3866 } |
|
3867 break; |
|
3868 |
|
3869 case 124: |
|
3870 |
|
3871 { |
|
3872 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3873 (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[(1) - (1)])); |
|
3874 (yyval.interm.type).setAggregate(2); |
|
3875 } |
|
3876 break; |
|
3877 |
|
3878 case 125: |
|
3879 |
|
3880 { |
|
3881 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3882 (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[(1) - (1)])); |
|
3883 (yyval.interm.type).setAggregate(3); |
|
3884 } |
|
3885 break; |
|
3886 |
|
3887 case 126: |
|
3888 |
|
3889 { |
|
3890 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3891 (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[(1) - (1)])); |
|
3892 (yyval.interm.type).setAggregate(4); |
|
3893 } |
|
3894 break; |
|
3895 |
|
3896 case 127: |
|
3897 |
|
3898 { |
|
3899 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3900 (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[(1) - (1)])); |
|
3901 (yyval.interm.type).setAggregate(2); |
|
3902 } |
|
3903 break; |
|
3904 |
|
3905 case 128: |
|
3906 |
|
3907 { |
|
3908 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3909 (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[(1) - (1)])); |
|
3910 (yyval.interm.type).setAggregate(3); |
|
3911 } |
|
3912 break; |
|
3913 |
|
3914 case 129: |
|
3915 |
|
3916 { |
|
3917 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3918 (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[(1) - (1)])); |
|
3919 (yyval.interm.type).setAggregate(4); |
|
3920 } |
|
3921 break; |
|
3922 |
|
3923 case 130: |
|
3924 |
|
3925 { |
|
3926 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3927 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3928 (yyval.interm.type).setAggregate(2, true); |
|
3929 } |
|
3930 break; |
|
3931 |
|
3932 case 131: |
|
3933 |
|
3934 { |
|
3935 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3936 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3937 (yyval.interm.type).setAggregate(3, true); |
|
3938 } |
|
3939 break; |
|
3940 |
|
3941 case 132: |
|
3942 |
|
3943 { |
|
3944 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3945 (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[(1) - (1)])); |
|
3946 (yyval.interm.type).setAggregate(4, true); |
|
3947 } |
|
3948 break; |
|
3949 |
|
3950 case 133: |
|
3951 |
|
3952 { |
|
3953 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3954 (yyval.interm.type).setBasic(EbtSampler2D, qual, (yylsp[(1) - (1)])); |
|
3955 } |
|
3956 break; |
|
3957 |
|
3958 case 134: |
|
3959 |
|
3960 { |
|
3961 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3962 (yyval.interm.type).setBasic(EbtSamplerCube, qual, (yylsp[(1) - (1)])); |
|
3963 } |
|
3964 break; |
|
3965 |
|
3966 case 135: |
|
3967 |
|
3968 { |
|
3969 if (!context->supportsExtension("GL_OES_EGL_image_external")) { |
|
3970 context->error((yylsp[(1) - (1)]), "unsupported type", "samplerExternalOES"); |
|
3971 context->recover(); |
|
3972 } |
|
3973 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3974 (yyval.interm.type).setBasic(EbtSamplerExternalOES, qual, (yylsp[(1) - (1)])); |
|
3975 } |
|
3976 break; |
|
3977 |
|
3978 case 136: |
|
3979 |
|
3980 { |
|
3981 if (!context->supportsExtension("GL_ARB_texture_rectangle")) { |
|
3982 context->error((yylsp[(1) - (1)]), "unsupported type", "sampler2DRect"); |
|
3983 context->recover(); |
|
3984 } |
|
3985 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3986 (yyval.interm.type).setBasic(EbtSampler2DRect, qual, (yylsp[(1) - (1)])); |
|
3987 } |
|
3988 break; |
|
3989 |
|
3990 case 137: |
|
3991 |
|
3992 { |
|
3993 (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type); |
|
3994 (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
3995 } |
|
3996 break; |
|
3997 |
|
3998 case 138: |
|
3999 |
|
4000 { |
|
4001 // |
|
4002 // This is for user defined type names. The lexical phase looked up the |
|
4003 // type. |
|
4004 // |
|
4005 TType& structure = static_cast<TVariable*>((yyvsp[(1) - (1)].lex).symbol)->getType(); |
|
4006 TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; |
|
4007 (yyval.interm.type).setBasic(EbtStruct, qual, (yylsp[(1) - (1)])); |
|
4008 (yyval.interm.type).userDef = &structure; |
|
4009 } |
|
4010 break; |
|
4011 |
|
4012 case 139: |
|
4013 |
|
4014 { if (context->enterStructDeclaration((yylsp[(2) - (3)]), *(yyvsp[(2) - (3)].lex).string)) context->recover(); } |
|
4015 break; |
|
4016 |
|
4017 case 140: |
|
4018 |
|
4019 { |
|
4020 if (context->reservedErrorCheck((yylsp[(2) - (6)]), *(yyvsp[(2) - (6)].lex).string)) |
|
4021 context->recover(); |
|
4022 |
|
4023 TType* structure = new TType(new TStructure((yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.fieldList))); |
|
4024 TVariable* userTypeDef = new TVariable((yyvsp[(2) - (6)].lex).string, *structure, true); |
|
4025 if (! context->symbolTable.insert(*userTypeDef)) { |
|
4026 context->error((yylsp[(2) - (6)]), "redefinition", (yyvsp[(2) - (6)].lex).string->c_str(), "struct"); |
|
4027 context->recover(); |
|
4028 } |
|
4029 (yyval.interm.type).setBasic(EbtStruct, EvqTemporary, (yylsp[(1) - (6)])); |
|
4030 (yyval.interm.type).userDef = structure; |
|
4031 context->exitStructDeclaration(); |
|
4032 } |
|
4033 break; |
|
4034 |
|
4035 case 141: |
|
4036 |
|
4037 { if (context->enterStructDeclaration((yylsp[(2) - (2)]), *(yyvsp[(2) - (2)].lex).string)) context->recover(); } |
|
4038 break; |
|
4039 |
|
4040 case 142: |
|
4041 |
|
4042 { |
|
4043 TType* structure = new TType(new TStructure(NewPoolTString(""), (yyvsp[(4) - (5)].interm.fieldList))); |
|
4044 (yyval.interm.type).setBasic(EbtStruct, EvqTemporary, (yylsp[(1) - (5)])); |
|
4045 (yyval.interm.type).userDef = structure; |
|
4046 context->exitStructDeclaration(); |
|
4047 } |
|
4048 break; |
|
4049 |
|
4050 case 143: |
|
4051 |
|
4052 { |
|
4053 (yyval.interm.fieldList) = (yyvsp[(1) - (1)].interm.fieldList); |
|
4054 } |
|
4055 break; |
|
4056 |
|
4057 case 144: |
|
4058 |
|
4059 { |
|
4060 (yyval.interm.fieldList) = (yyvsp[(1) - (2)].interm.fieldList); |
|
4061 for (size_t i = 0; i < (yyvsp[(2) - (2)].interm.fieldList)->size(); ++i) { |
|
4062 TField* field = (*(yyvsp[(2) - (2)].interm.fieldList))[i]; |
|
4063 for (size_t j = 0; j < (yyval.interm.fieldList)->size(); ++j) { |
|
4064 if ((*(yyval.interm.fieldList))[j]->name() == field->name()) { |
|
4065 context->error((yylsp[(2) - (2)]), "duplicate field name in structure:", "struct", field->name().c_str()); |
|
4066 context->recover(); |
|
4067 } |
|
4068 } |
|
4069 (yyval.interm.fieldList)->push_back(field); |
|
4070 } |
|
4071 } |
|
4072 break; |
|
4073 |
|
4074 case 145: |
|
4075 |
|
4076 { |
|
4077 (yyval.interm.fieldList) = (yyvsp[(2) - (3)].interm.fieldList); |
|
4078 |
|
4079 if (context->voidErrorCheck((yylsp[(1) - (3)]), (*(yyvsp[(2) - (3)].interm.fieldList))[0]->name(), (yyvsp[(1) - (3)].interm.type))) { |
|
4080 context->recover(); |
|
4081 } |
|
4082 for (unsigned int i = 0; i < (yyval.interm.fieldList)->size(); ++i) { |
|
4083 // |
|
4084 // Careful not to replace already known aspects of type, like array-ness |
|
4085 // |
|
4086 TType* type = (*(yyval.interm.fieldList))[i]->type(); |
|
4087 type->setBasicType((yyvsp[(1) - (3)].interm.type).type); |
|
4088 type->setNominalSize((yyvsp[(1) - (3)].interm.type).size); |
|
4089 type->setMatrix((yyvsp[(1) - (3)].interm.type).matrix); |
|
4090 type->setPrecision((yyvsp[(1) - (3)].interm.type).precision); |
|
4091 |
|
4092 // don't allow arrays of arrays |
|
4093 if (type->isArray()) { |
|
4094 if (context->arrayTypeErrorCheck((yylsp[(1) - (3)]), (yyvsp[(1) - (3)].interm.type))) |
|
4095 context->recover(); |
|
4096 } |
|
4097 if ((yyvsp[(1) - (3)].interm.type).array) |
|
4098 type->setArraySize((yyvsp[(1) - (3)].interm.type).arraySize); |
|
4099 if ((yyvsp[(1) - (3)].interm.type).userDef) |
|
4100 type->setStruct((yyvsp[(1) - (3)].interm.type).userDef->getStruct()); |
|
4101 |
|
4102 if (context->structNestingErrorCheck((yylsp[(1) - (3)]), *(*(yyval.interm.fieldList))[i])) |
|
4103 context->recover(); |
|
4104 } |
|
4105 } |
|
4106 break; |
|
4107 |
|
4108 case 146: |
|
4109 |
|
4110 { |
|
4111 (yyval.interm.fieldList) = NewPoolTFieldList(); |
|
4112 (yyval.interm.fieldList)->push_back((yyvsp[(1) - (1)].interm.field)); |
|
4113 } |
|
4114 break; |
|
4115 |
|
4116 case 147: |
|
4117 |
|
4118 { |
|
4119 (yyval.interm.fieldList)->push_back((yyvsp[(3) - (3)].interm.field)); |
|
4120 } |
|
4121 break; |
|
4122 |
|
4123 case 148: |
|
4124 |
|
4125 { |
|
4126 if (context->reservedErrorCheck((yylsp[(1) - (1)]), *(yyvsp[(1) - (1)].lex).string)) |
|
4127 context->recover(); |
|
4128 |
|
4129 TType* type = new TType(EbtVoid, EbpUndefined); |
|
4130 (yyval.interm.field) = new TField(type, (yyvsp[(1) - (1)].lex).string); |
|
4131 } |
|
4132 break; |
|
4133 |
|
4134 case 149: |
|
4135 |
|
4136 { |
|
4137 if (context->reservedErrorCheck((yylsp[(1) - (4)]), *(yyvsp[(1) - (4)].lex).string)) |
|
4138 context->recover(); |
|
4139 |
|
4140 TType* type = new TType(EbtVoid, EbpUndefined); |
|
4141 int size = 0; |
|
4142 if (context->arraySizeErrorCheck((yylsp[(3) - (4)]), (yyvsp[(3) - (4)].interm.intermTypedNode), size)) |
|
4143 context->recover(); |
|
4144 type->setArraySize(size); |
|
4145 |
|
4146 (yyval.interm.field) = new TField(type, (yyvsp[(1) - (4)].lex).string); |
|
4147 } |
|
4148 break; |
|
4149 |
|
4150 case 150: |
|
4151 |
|
4152 { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); } |
|
4153 break; |
|
4154 |
|
4155 case 151: |
|
4156 |
|
4157 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4158 break; |
|
4159 |
|
4160 case 152: |
|
4161 |
|
4162 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); } |
|
4163 break; |
|
4164 |
|
4165 case 153: |
|
4166 |
|
4167 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4168 break; |
|
4169 |
|
4170 case 154: |
|
4171 |
|
4172 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4173 break; |
|
4174 |
|
4175 case 155: |
|
4176 |
|
4177 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4178 break; |
|
4179 |
|
4180 case 156: |
|
4181 |
|
4182 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4183 break; |
|
4184 |
|
4185 case 157: |
|
4186 |
|
4187 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4188 break; |
|
4189 |
|
4190 case 158: |
|
4191 |
|
4192 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4193 break; |
|
4194 |
|
4195 case 159: |
|
4196 |
|
4197 { (yyval.interm.intermAggregate) = 0; } |
|
4198 break; |
|
4199 |
|
4200 case 160: |
|
4201 |
|
4202 { context->symbolTable.push(); } |
|
4203 break; |
|
4204 |
|
4205 case 161: |
|
4206 |
|
4207 { context->symbolTable.pop(); } |
|
4208 break; |
|
4209 |
|
4210 case 162: |
|
4211 |
|
4212 { |
|
4213 if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) { |
|
4214 (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence); |
|
4215 (yyvsp[(3) - (5)].interm.intermAggregate)->setLine((yyloc)); |
|
4216 } |
|
4217 (yyval.interm.intermAggregate) = (yyvsp[(3) - (5)].interm.intermAggregate); |
|
4218 } |
|
4219 break; |
|
4220 |
|
4221 case 163: |
|
4222 |
|
4223 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4224 break; |
|
4225 |
|
4226 case 164: |
|
4227 |
|
4228 { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); } |
|
4229 break; |
|
4230 |
|
4231 case 165: |
|
4232 |
|
4233 { context->symbolTable.push(); } |
|
4234 break; |
|
4235 |
|
4236 case 166: |
|
4237 |
|
4238 { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); } |
|
4239 break; |
|
4240 |
|
4241 case 167: |
|
4242 |
|
4243 { context->symbolTable.push(); } |
|
4244 break; |
|
4245 |
|
4246 case 168: |
|
4247 |
|
4248 { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); } |
|
4249 break; |
|
4250 |
|
4251 case 169: |
|
4252 |
|
4253 { |
|
4254 (yyval.interm.intermNode) = 0; |
|
4255 } |
|
4256 break; |
|
4257 |
|
4258 case 170: |
|
4259 |
|
4260 { |
|
4261 if ((yyvsp[(2) - (3)].interm.intermAggregate)) { |
|
4262 (yyvsp[(2) - (3)].interm.intermAggregate)->setOp(EOpSequence); |
|
4263 (yyvsp[(2) - (3)].interm.intermAggregate)->setLine((yyloc)); |
|
4264 } |
|
4265 (yyval.interm.intermNode) = (yyvsp[(2) - (3)].interm.intermAggregate); |
|
4266 } |
|
4267 break; |
|
4268 |
|
4269 case 171: |
|
4270 |
|
4271 { |
|
4272 (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), (yyloc)); |
|
4273 } |
|
4274 break; |
|
4275 |
|
4276 case 172: |
|
4277 |
|
4278 { |
|
4279 (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), (yyloc)); |
|
4280 } |
|
4281 break; |
|
4282 |
|
4283 case 173: |
|
4284 |
|
4285 { (yyval.interm.intermNode) = 0; } |
|
4286 break; |
|
4287 |
|
4288 case 174: |
|
4289 |
|
4290 { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); } |
|
4291 break; |
|
4292 |
|
4293 case 175: |
|
4294 |
|
4295 { |
|
4296 if (context->boolErrorCheck((yylsp[(1) - (5)]), (yyvsp[(3) - (5)].interm.intermTypedNode))) |
|
4297 context->recover(); |
|
4298 (yyval.interm.intermNode) = context->intermediate.addSelection((yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.nodePair), (yylsp[(1) - (5)])); |
|
4299 } |
|
4300 break; |
|
4301 |
|
4302 case 176: |
|
4303 |
|
4304 { |
|
4305 (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode); |
|
4306 (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermNode); |
|
4307 } |
|
4308 break; |
|
4309 |
|
4310 case 177: |
|
4311 |
|
4312 { |
|
4313 (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode); |
|
4314 (yyval.interm.nodePair).node2 = 0; |
|
4315 } |
|
4316 break; |
|
4317 |
|
4318 case 178: |
|
4319 |
|
4320 { |
|
4321 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
4322 if (context->boolErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)->getLine(), (yyvsp[(1) - (1)].interm.intermTypedNode))) |
|
4323 context->recover(); |
|
4324 } |
|
4325 break; |
|
4326 |
|
4327 case 179: |
|
4328 |
|
4329 { |
|
4330 TIntermNode* intermNode; |
|
4331 if (context->structQualifierErrorCheck((yylsp[(2) - (4)]), (yyvsp[(1) - (4)].interm.type))) |
|
4332 context->recover(); |
|
4333 if (context->boolErrorCheck((yylsp[(2) - (4)]), (yyvsp[(1) - (4)].interm.type))) |
|
4334 context->recover(); |
|
4335 |
|
4336 if (!context->executeInitializer((yylsp[(2) - (4)]), *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), (yyvsp[(4) - (4)].interm.intermTypedNode), intermNode)) |
|
4337 (yyval.interm.intermTypedNode) = (yyvsp[(4) - (4)].interm.intermTypedNode); |
|
4338 else { |
|
4339 context->recover(); |
|
4340 (yyval.interm.intermTypedNode) = 0; |
|
4341 } |
|
4342 } |
|
4343 break; |
|
4344 |
|
4345 case 180: |
|
4346 |
|
4347 { context->symbolTable.push(); ++context->loopNestingLevel; } |
|
4348 break; |
|
4349 |
|
4350 case 181: |
|
4351 |
|
4352 { |
|
4353 context->symbolTable.pop(); |
|
4354 (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopWhile, 0, (yyvsp[(4) - (6)].interm.intermTypedNode), 0, (yyvsp[(6) - (6)].interm.intermNode), (yylsp[(1) - (6)])); |
|
4355 --context->loopNestingLevel; |
|
4356 } |
|
4357 break; |
|
4358 |
|
4359 case 182: |
|
4360 |
|
4361 { ++context->loopNestingLevel; } |
|
4362 break; |
|
4363 |
|
4364 case 183: |
|
4365 |
|
4366 { |
|
4367 if (context->boolErrorCheck((yylsp[(8) - (8)]), (yyvsp[(6) - (8)].interm.intermTypedNode))) |
|
4368 context->recover(); |
|
4369 |
|
4370 (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopDoWhile, 0, (yyvsp[(6) - (8)].interm.intermTypedNode), 0, (yyvsp[(3) - (8)].interm.intermNode), (yylsp[(4) - (8)])); |
|
4371 --context->loopNestingLevel; |
|
4372 } |
|
4373 break; |
|
4374 |
|
4375 case 184: |
|
4376 |
|
4377 { context->symbolTable.push(); ++context->loopNestingLevel; } |
|
4378 break; |
|
4379 |
|
4380 case 185: |
|
4381 |
|
4382 { |
|
4383 context->symbolTable.pop(); |
|
4384 (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yylsp[(1) - (7)])); |
|
4385 --context->loopNestingLevel; |
|
4386 } |
|
4387 break; |
|
4388 |
|
4389 case 186: |
|
4390 |
|
4391 { |
|
4392 (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); |
|
4393 } |
|
4394 break; |
|
4395 |
|
4396 case 187: |
|
4397 |
|
4398 { |
|
4399 (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); |
|
4400 } |
|
4401 break; |
|
4402 |
|
4403 case 188: |
|
4404 |
|
4405 { |
|
4406 (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); |
|
4407 } |
|
4408 break; |
|
4409 |
|
4410 case 189: |
|
4411 |
|
4412 { |
|
4413 (yyval.interm.intermTypedNode) = 0; |
|
4414 } |
|
4415 break; |
|
4416 |
|
4417 case 190: |
|
4418 |
|
4419 { |
|
4420 (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode); |
|
4421 (yyval.interm.nodePair).node2 = 0; |
|
4422 } |
|
4423 break; |
|
4424 |
|
4425 case 191: |
|
4426 |
|
4427 { |
|
4428 (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode); |
|
4429 (yyval.interm.nodePair).node2 = (yyvsp[(3) - (3)].interm.intermTypedNode); |
|
4430 } |
|
4431 break; |
|
4432 |
|
4433 case 192: |
|
4434 |
|
4435 { |
|
4436 if (context->loopNestingLevel <= 0) { |
|
4437 context->error((yylsp[(1) - (2)]), "continue statement only allowed in loops", ""); |
|
4438 context->recover(); |
|
4439 } |
|
4440 (yyval.interm.intermNode) = context->intermediate.addBranch(EOpContinue, (yylsp[(1) - (2)])); |
|
4441 } |
|
4442 break; |
|
4443 |
|
4444 case 193: |
|
4445 |
|
4446 { |
|
4447 if (context->loopNestingLevel <= 0) { |
|
4448 context->error((yylsp[(1) - (2)]), "break statement only allowed in loops", ""); |
|
4449 context->recover(); |
|
4450 } |
|
4451 (yyval.interm.intermNode) = context->intermediate.addBranch(EOpBreak, (yylsp[(1) - (2)])); |
|
4452 } |
|
4453 break; |
|
4454 |
|
4455 case 194: |
|
4456 |
|
4457 { |
|
4458 (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yylsp[(1) - (2)])); |
|
4459 if (context->currentFunctionType->getBasicType() != EbtVoid) { |
|
4460 context->error((yylsp[(1) - (2)]), "non-void function must return a value", "return"); |
|
4461 context->recover(); |
|
4462 } |
|
4463 } |
|
4464 break; |
|
4465 |
|
4466 case 195: |
|
4467 |
|
4468 { |
|
4469 (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yylsp[(1) - (3)])); |
|
4470 context->functionReturnsValue = true; |
|
4471 if (context->currentFunctionType->getBasicType() == EbtVoid) { |
|
4472 context->error((yylsp[(1) - (3)]), "void function cannot return a value", "return"); |
|
4473 context->recover(); |
|
4474 } else if (*(context->currentFunctionType) != (yyvsp[(2) - (3)].interm.intermTypedNode)->getType()) { |
|
4475 context->error((yylsp[(1) - (3)]), "function return is not matching type:", "return"); |
|
4476 context->recover(); |
|
4477 } |
|
4478 } |
|
4479 break; |
|
4480 |
|
4481 case 196: |
|
4482 |
|
4483 { |
|
4484 FRAG_ONLY("discard", (yylsp[(1) - (2)])); |
|
4485 (yyval.interm.intermNode) = context->intermediate.addBranch(EOpKill, (yylsp[(1) - (2)])); |
|
4486 } |
|
4487 break; |
|
4488 |
|
4489 case 197: |
|
4490 |
|
4491 { |
|
4492 (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); |
|
4493 context->treeRoot = (yyval.interm.intermNode); |
|
4494 } |
|
4495 break; |
|
4496 |
|
4497 case 198: |
|
4498 |
|
4499 { |
|
4500 (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), (yyloc)); |
|
4501 context->treeRoot = (yyval.interm.intermNode); |
|
4502 } |
|
4503 break; |
|
4504 |
|
4505 case 199: |
|
4506 |
|
4507 { |
|
4508 (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); |
|
4509 } |
|
4510 break; |
|
4511 |
|
4512 case 200: |
|
4513 |
|
4514 { |
|
4515 (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); |
|
4516 } |
|
4517 break; |
|
4518 |
|
4519 case 201: |
|
4520 |
|
4521 { |
|
4522 TFunction* function = (yyvsp[(1) - (1)].interm).function; |
|
4523 |
|
4524 const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName()); |
|
4525 |
|
4526 if (builtIn) |
|
4527 { |
|
4528 context->error((yylsp[(1) - (1)]), "built-in functions cannot be redefined", function->getName().c_str()); |
|
4529 context->recover(); |
|
4530 } |
|
4531 |
|
4532 TFunction* prevDec = static_cast<TFunction*>(context->symbolTable.find(function->getMangledName())); |
|
4533 // |
|
4534 // Note: 'prevDec' could be 'function' if this is the first time we've seen function |
|
4535 // as it would have just been put in the symbol table. Otherwise, we're looking up |
|
4536 // an earlier occurance. |
|
4537 // |
|
4538 if (prevDec->isDefined()) { |
|
4539 // |
|
4540 // Then this function already has a body. |
|
4541 // |
|
4542 context->error((yylsp[(1) - (1)]), "function already has a body", function->getName().c_str()); |
|
4543 context->recover(); |
|
4544 } |
|
4545 prevDec->setDefined(); |
|
4546 |
|
4547 // |
|
4548 // Raise error message if main function takes any parameters or return anything other than void |
|
4549 // |
|
4550 if (function->getName() == "main") { |
|
4551 if (function->getParamCount() > 0) { |
|
4552 context->error((yylsp[(1) - (1)]), "function cannot take any parameter(s)", function->getName().c_str()); |
|
4553 context->recover(); |
|
4554 } |
|
4555 if (function->getReturnType().getBasicType() != EbtVoid) { |
|
4556 context->error((yylsp[(1) - (1)]), "", function->getReturnType().getBasicString(), "main function cannot return a value"); |
|
4557 context->recover(); |
|
4558 } |
|
4559 } |
|
4560 |
|
4561 // |
|
4562 // Remember the return type for later checking for RETURN statements. |
|
4563 // |
|
4564 context->currentFunctionType = &(prevDec->getReturnType()); |
|
4565 context->functionReturnsValue = false; |
|
4566 |
|
4567 // |
|
4568 // Insert parameters into the symbol table. |
|
4569 // If the parameter has no name, it's not an error, just don't insert it |
|
4570 // (could be used for unused args). |
|
4571 // |
|
4572 // Also, accumulate the list of parameters into the HIL, so lower level code |
|
4573 // knows where to find parameters. |
|
4574 // |
|
4575 TIntermAggregate* paramNodes = new TIntermAggregate; |
|
4576 for (size_t i = 0; i < function->getParamCount(); i++) { |
|
4577 const TParameter& param = function->getParam(i); |
|
4578 if (param.name != 0) { |
|
4579 TVariable *variable = new TVariable(param.name, *param.type); |
|
4580 // |
|
4581 // Insert the parameters with name in the symbol table. |
|
4582 // |
|
4583 if (! context->symbolTable.insert(*variable)) { |
|
4584 context->error((yylsp[(1) - (1)]), "redefinition", variable->getName().c_str()); |
|
4585 context->recover(); |
|
4586 delete variable; |
|
4587 } |
|
4588 |
|
4589 // |
|
4590 // Add the parameter to the HIL |
|
4591 // |
|
4592 paramNodes = context->intermediate.growAggregate( |
|
4593 paramNodes, |
|
4594 context->intermediate.addSymbol(variable->getUniqueId(), |
|
4595 variable->getName(), |
|
4596 variable->getType(), |
|
4597 (yylsp[(1) - (1)])), |
|
4598 (yylsp[(1) - (1)])); |
|
4599 } else { |
|
4600 paramNodes = context->intermediate.growAggregate(paramNodes, context->intermediate.addSymbol(0, "", *param.type, (yylsp[(1) - (1)])), (yylsp[(1) - (1)])); |
|
4601 } |
|
4602 } |
|
4603 context->intermediate.setAggregateOperator(paramNodes, EOpParameters, (yylsp[(1) - (1)])); |
|
4604 (yyvsp[(1) - (1)].interm).intermAggregate = paramNodes; |
|
4605 context->loopNestingLevel = 0; |
|
4606 } |
|
4607 break; |
|
4608 |
|
4609 case 202: |
|
4610 |
|
4611 { |
|
4612 //?? Check that all paths return a value if return type != void ? |
|
4613 // May be best done as post process phase on intermediate code |
|
4614 if (context->currentFunctionType->getBasicType() != EbtVoid && ! context->functionReturnsValue) { |
|
4615 context->error((yylsp[(1) - (3)]), "function does not return a value:", "", (yyvsp[(1) - (3)].interm).function->getName().c_str()); |
|
4616 context->recover(); |
|
4617 } |
|
4618 |
|
4619 (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (3)].interm).intermAggregate, (yyvsp[(3) - (3)].interm.intermNode), (yyloc)); |
|
4620 context->intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yylsp[(1) - (3)])); |
|
4621 (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[(1) - (3)].interm).function->getMangledName().c_str()); |
|
4622 (yyval.interm.intermNode)->getAsAggregate()->setType((yyvsp[(1) - (3)].interm).function->getReturnType()); |
|
4623 |
|
4624 // store the pragma information for debug and optimize and other vendor specific |
|
4625 // information. This information can be queried from the parse tree |
|
4626 (yyval.interm.intermNode)->getAsAggregate()->setOptimize(context->pragma().optimize); |
|
4627 (yyval.interm.intermNode)->getAsAggregate()->setDebug(context->pragma().debug); |
|
4628 |
|
4629 context->symbolTable.pop(); |
|
4630 } |
|
4631 break; |
|
4632 |
|
4633 |
|
4634 |
|
4635 default: break; |
|
4636 } |
|
4637 /* User semantic actions sometimes alter yychar, and that requires |
|
4638 that yytoken be updated with the new translation. We take the |
|
4639 approach of translating immediately before every use of yytoken. |
|
4640 One alternative is translating here after every semantic action, |
|
4641 but that translation would be missed if the semantic action invokes |
|
4642 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or |
|
4643 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an |
|
4644 incorrect destructor might then be invoked immediately. In the |
|
4645 case of YYERROR or YYBACKUP, subsequent parser actions might lead |
|
4646 to an incorrect destructor call or verbose syntax error message |
|
4647 before the lookahead is translated. */ |
|
4648 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); |
|
4649 |
|
4650 YYPOPSTACK (yylen); |
|
4651 yylen = 0; |
|
4652 YY_STACK_PRINT (yyss, yyssp); |
|
4653 |
|
4654 *++yyvsp = yyval; |
|
4655 *++yylsp = yyloc; |
|
4656 |
|
4657 /* Now `shift' the result of the reduction. Determine what state |
|
4658 that goes to, based on the state we popped back to and the rule |
|
4659 number reduced by. */ |
|
4660 |
|
4661 yyn = yyr1[yyn]; |
|
4662 |
|
4663 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; |
|
4664 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) |
|
4665 yystate = yytable[yystate]; |
|
4666 else |
|
4667 yystate = yydefgoto[yyn - YYNTOKENS]; |
|
4668 |
|
4669 goto yynewstate; |
|
4670 |
|
4671 |
|
4672 /*------------------------------------. |
|
4673 | yyerrlab -- here on detecting error | |
|
4674 `------------------------------------*/ |
|
4675 yyerrlab: |
|
4676 /* Make sure we have latest lookahead translation. See comments at |
|
4677 user semantic actions for why this is necessary. */ |
|
4678 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); |
|
4679 |
|
4680 /* If not already recovering from an error, report this error. */ |
|
4681 if (!yyerrstatus) |
|
4682 { |
|
4683 ++yynerrs; |
|
4684 #if ! YYERROR_VERBOSE |
|
4685 yyerror (&yylloc, context, YY_("syntax error")); |
|
4686 #else |
|
4687 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ |
|
4688 yyssp, yytoken) |
|
4689 { |
|
4690 char const *yymsgp = YY_("syntax error"); |
|
4691 int yysyntax_error_status; |
|
4692 yysyntax_error_status = YYSYNTAX_ERROR; |
|
4693 if (yysyntax_error_status == 0) |
|
4694 yymsgp = yymsg; |
|
4695 else if (yysyntax_error_status == 1) |
|
4696 { |
|
4697 if (yymsg != yymsgbuf) |
|
4698 YYSTACK_FREE (yymsg); |
|
4699 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); |
|
4700 if (!yymsg) |
|
4701 { |
|
4702 yymsg = yymsgbuf; |
|
4703 yymsg_alloc = sizeof yymsgbuf; |
|
4704 yysyntax_error_status = 2; |
|
4705 } |
|
4706 else |
|
4707 { |
|
4708 yysyntax_error_status = YYSYNTAX_ERROR; |
|
4709 yymsgp = yymsg; |
|
4710 } |
|
4711 } |
|
4712 yyerror (&yylloc, context, yymsgp); |
|
4713 if (yysyntax_error_status == 2) |
|
4714 goto yyexhaustedlab; |
|
4715 } |
|
4716 # undef YYSYNTAX_ERROR |
|
4717 #endif |
|
4718 } |
|
4719 |
|
4720 yyerror_range[1] = yylloc; |
|
4721 |
|
4722 if (yyerrstatus == 3) |
|
4723 { |
|
4724 /* If just tried and failed to reuse lookahead token after an |
|
4725 error, discard it. */ |
|
4726 |
|
4727 if (yychar <= YYEOF) |
|
4728 { |
|
4729 /* Return failure if at end of input. */ |
|
4730 if (yychar == YYEOF) |
|
4731 YYABORT; |
|
4732 } |
|
4733 else |
|
4734 { |
|
4735 yydestruct ("Error: discarding", |
|
4736 yytoken, &yylval, &yylloc, context); |
|
4737 yychar = YYEMPTY; |
|
4738 } |
|
4739 } |
|
4740 |
|
4741 /* Else will try to reuse lookahead token after shifting the error |
|
4742 token. */ |
|
4743 goto yyerrlab1; |
|
4744 |
|
4745 |
|
4746 /*---------------------------------------------------. |
|
4747 | yyerrorlab -- error raised explicitly by YYERROR. | |
|
4748 `---------------------------------------------------*/ |
|
4749 yyerrorlab: |
|
4750 |
|
4751 /* Pacify compilers like GCC when the user code never invokes |
|
4752 YYERROR and the label yyerrorlab therefore never appears in user |
|
4753 code. */ |
|
4754 if (/*CONSTCOND*/ 0) |
|
4755 goto yyerrorlab; |
|
4756 |
|
4757 yyerror_range[1] = yylsp[1-yylen]; |
|
4758 /* Do not reclaim the symbols of the rule which action triggered |
|
4759 this YYERROR. */ |
|
4760 YYPOPSTACK (yylen); |
|
4761 yylen = 0; |
|
4762 YY_STACK_PRINT (yyss, yyssp); |
|
4763 yystate = *yyssp; |
|
4764 goto yyerrlab1; |
|
4765 |
|
4766 |
|
4767 /*-------------------------------------------------------------. |
|
4768 | yyerrlab1 -- common code for both syntax error and YYERROR. | |
|
4769 `-------------------------------------------------------------*/ |
|
4770 yyerrlab1: |
|
4771 yyerrstatus = 3; /* Each real token shifted decrements this. */ |
|
4772 |
|
4773 for (;;) |
|
4774 { |
|
4775 yyn = yypact[yystate]; |
|
4776 if (!yypact_value_is_default (yyn)) |
|
4777 { |
|
4778 yyn += YYTERROR; |
|
4779 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) |
|
4780 { |
|
4781 yyn = yytable[yyn]; |
|
4782 if (0 < yyn) |
|
4783 break; |
|
4784 } |
|
4785 } |
|
4786 |
|
4787 /* Pop the current state because it cannot handle the error token. */ |
|
4788 if (yyssp == yyss) |
|
4789 YYABORT; |
|
4790 |
|
4791 yyerror_range[1] = *yylsp; |
|
4792 yydestruct ("Error: popping", |
|
4793 yystos[yystate], yyvsp, yylsp, context); |
|
4794 YYPOPSTACK (1); |
|
4795 yystate = *yyssp; |
|
4796 YY_STACK_PRINT (yyss, yyssp); |
|
4797 } |
|
4798 |
|
4799 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN |
|
4800 *++yyvsp = yylval; |
|
4801 YY_IGNORE_MAYBE_UNINITIALIZED_END |
|
4802 |
|
4803 yyerror_range[2] = yylloc; |
|
4804 /* Using YYLLOC is tempting, but would change the location of |
|
4805 the lookahead. YYLOC is available though. */ |
|
4806 YYLLOC_DEFAULT (yyloc, yyerror_range, 2); |
|
4807 *++yylsp = yyloc; |
|
4808 |
|
4809 /* Shift the error token. */ |
|
4810 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); |
|
4811 |
|
4812 yystate = yyn; |
|
4813 goto yynewstate; |
|
4814 |
|
4815 |
|
4816 /*-------------------------------------. |
|
4817 | yyacceptlab -- YYACCEPT comes here. | |
|
4818 `-------------------------------------*/ |
|
4819 yyacceptlab: |
|
4820 yyresult = 0; |
|
4821 goto yyreturn; |
|
4822 |
|
4823 /*-----------------------------------. |
|
4824 | yyabortlab -- YYABORT comes here. | |
|
4825 `-----------------------------------*/ |
|
4826 yyabortlab: |
|
4827 yyresult = 1; |
|
4828 goto yyreturn; |
|
4829 |
|
4830 #if !defined yyoverflow || YYERROR_VERBOSE |
|
4831 /*-------------------------------------------------. |
|
4832 | yyexhaustedlab -- memory exhaustion comes here. | |
|
4833 `-------------------------------------------------*/ |
|
4834 yyexhaustedlab: |
|
4835 yyerror (&yylloc, context, YY_("memory exhausted")); |
|
4836 yyresult = 2; |
|
4837 /* Fall through. */ |
|
4838 #endif |
|
4839 |
|
4840 yyreturn: |
|
4841 if (yychar != YYEMPTY) |
|
4842 { |
|
4843 /* Make sure we have latest lookahead translation. See comments at |
|
4844 user semantic actions for why this is necessary. */ |
|
4845 yytoken = YYTRANSLATE (yychar); |
|
4846 yydestruct ("Cleanup: discarding lookahead", |
|
4847 yytoken, &yylval, &yylloc, context); |
|
4848 } |
|
4849 /* Do not reclaim the symbols of the rule which action triggered |
|
4850 this YYABORT or YYACCEPT. */ |
|
4851 YYPOPSTACK (yylen); |
|
4852 YY_STACK_PRINT (yyss, yyssp); |
|
4853 while (yyssp != yyss) |
|
4854 { |
|
4855 yydestruct ("Cleanup: popping", |
|
4856 yystos[*yyssp], yyvsp, yylsp, context); |
|
4857 YYPOPSTACK (1); |
|
4858 } |
|
4859 #ifndef yyoverflow |
|
4860 if (yyss != yyssa) |
|
4861 YYSTACK_FREE (yyss); |
|
4862 #endif |
|
4863 #if YYERROR_VERBOSE |
|
4864 if (yymsg != yymsgbuf) |
|
4865 YYSTACK_FREE (yymsg); |
|
4866 #endif |
|
4867 /* Make sure YYID is used. */ |
|
4868 return YYID (yyresult); |
|
4869 } |
|
4870 |
|
4871 |
|
4872 |
|
4873 |
|
4874 |
|
4875 void yyerror(YYLTYPE* yylloc, TParseContext* context, const char* reason) { |
|
4876 context->error(*yylloc, reason, ""); |
|
4877 context->recover(); |
|
4878 } |
|
4879 |
|
4880 int glslang_parse(TParseContext* context) { |
|
4881 return yyparse(context); |
|
4882 } |