loongarch-parse.c revision 1.1 1 1.1 christos /* A Bison parser, made by GNU Bison 3.8.2. */
2 1.1 christos
3 1.1 christos /* Bison implementation for Yacc-like parsers in C
4 1.1 christos
5 1.1 christos Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6 1.1 christos Inc.
7 1.1 christos
8 1.1 christos This program is free software: you can redistribute it and/or modify
9 1.1 christos it under the terms of the GNU General Public License as published by
10 1.1 christos the Free Software Foundation, either version 3 of the License, or
11 1.1 christos (at your option) any later version.
12 1.1 christos
13 1.1 christos This program is distributed in the hope that it will be useful,
14 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
15 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 1.1 christos GNU General Public License for more details.
17 1.1 christos
18 1.1 christos You should have received a copy of the GNU General Public License
19 1.1 christos along with this program. If not, see <https://www.gnu.org/licenses/>. */
20 1.1 christos
21 1.1 christos /* As a special exception, you may create a larger work that contains
22 1.1 christos part or all of the Bison parser skeleton and distribute that work
23 1.1 christos under terms of your choice, so long as that work isn't itself a
24 1.1 christos parser generator using the skeleton or a modified version thereof
25 1.1 christos as a parser skeleton. Alternatively, if you modify or redistribute
26 1.1 christos the parser skeleton itself, you may (at your option) remove this
27 1.1 christos special exception, which will cause the skeleton and the resulting
28 1.1 christos Bison output files to be licensed under the GNU General Public
29 1.1 christos License without this special exception.
30 1.1 christos
31 1.1 christos This special exception was added by the Free Software Foundation in
32 1.1 christos version 2.2 of Bison. */
33 1.1 christos
34 1.1 christos /* C LALR(1) parser skeleton written by Richard Stallman, by
35 1.1 christos simplifying the original so-called "semantic" parser. */
36 1.1 christos
37 1.1 christos /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38 1.1 christos especially those whose name start with YY_ or yy_. They are
39 1.1 christos private implementation details that can be changed or removed. */
40 1.1 christos
41 1.1 christos /* All symbols defined below should begin with yy or YY, to avoid
42 1.1 christos infringing on user name space. This should be done even for local
43 1.1 christos variables, as they might otherwise be expanded by user macros.
44 1.1 christos There are some unavoidable exceptions within include files to
45 1.1 christos define necessary library symbols; they are noted "INFRINGES ON
46 1.1 christos USER NAME SPACE" below. */
47 1.1 christos
48 1.1 christos /* Identify Bison output, and Bison version. */
49 1.1 christos #define YYBISON 30802
50 1.1 christos
51 1.1 christos /* Bison version string. */
52 1.1 christos #define YYBISON_VERSION "3.8.2"
53 1.1 christos
54 1.1 christos /* Skeleton name. */
55 1.1 christos #define YYSKELETON_NAME "yacc.c"
56 1.1 christos
57 1.1 christos /* Pure parsers. */
58 1.1 christos #define YYPURE 0
59 1.1 christos
60 1.1 christos /* Push parsers. */
61 1.1 christos #define YYPUSH 0
62 1.1 christos
63 1.1 christos /* Pull parsers. */
64 1.1 christos #define YYPULL 1
65 1.1 christos
66 1.1 christos
67 1.1 christos
68 1.1 christos
69 1.1 christos /* First part of user prologue. */
70 1.1 christos #line 19 "./config/loongarch-parse.y"
71 1.1 christos
72 1.1 christos #include "as.h"
73 1.1 christos #include "loongarch-lex.h"
74 1.1 christos #include "loongarch-parse.h"
75 1.1 christos static void yyerror (const char *s ATTRIBUTE_UNUSED)
76 1.1 christos {
77 1.1 christos };
78 1.1 christos int yylex (void);
79 1.1 christos
80 1.1 christos
81 1.1 christos static struct reloc_info *top, *end;
82 1.1 christos
83 1.1 christos static expressionS const_0 =
84 1.1 christos {
85 1.1 christos .X_op = O_constant,
86 1.1 christos .X_add_number = 0
87 1.1 christos };
88 1.1 christos
89 1.1 christos static int
90 1.1 christos is_const (struct reloc_info *info)
91 1.1 christos {
92 1.1 christos return (info->type == BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE
93 1.1 christos && info->value.X_op == O_constant);
94 1.1 christos }
95 1.1 christos
96 1.1 christos int
97 1.1 christos loongarch_parse_expr (const char *expr,
98 1.1 christos struct reloc_info *reloc_stack_top,
99 1.1 christos size_t max_reloc_num,
100 1.1 christos size_t *reloc_num,
101 1.1 christos offsetT *imm)
102 1.1 christos {
103 1.1 christos int ret;
104 1.1 christos struct yy_buffer_state *buffstate;
105 1.1 christos top = reloc_stack_top;
106 1.1 christos end = top + max_reloc_num;
107 1.1 christos buffstate = yy_scan_string (expr);
108 1.1 christos ret = yyparse ();
109 1.1 christos
110 1.1 christos if (ret == 0)
111 1.1 christos {
112 1.1 christos if (is_const (top - 1))
113 1.1 christos *imm = (--top)->value.X_add_number;
114 1.1 christos else
115 1.1 christos *imm = 0;
116 1.1 christos *reloc_num = top - reloc_stack_top;
117 1.1 christos }
118 1.1 christos yy_delete_buffer (buffstate);
119 1.1 christos
120 1.1 christos return ret;
121 1.1 christos }
122 1.1 christos
123 1.1 christos static void
124 1.1 christos emit_const (offsetT imm)
125 1.1 christos {
126 1.1 christos if (end <= top)
127 1.1 christos as_fatal (_("expr too huge"));
128 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE;
129 1.1 christos top->value.X_op = O_constant;
130 1.1 christos top->value.X_add_number = imm;
131 1.1 christos top++;
132 1.1 christos }
133 1.1 christos
134 1.1 christos static const char *
135 1.1 christos my_getExpression (expressionS *ep, const char *str)
136 1.1 christos {
137 1.1 christos char *save_in, *ret;
138 1.1 christos if (*str == ':')
139 1.1 christos {
140 1.1 christos unsigned long j;
141 1.1 christos char *str_1 = (char *) str;
142 1.1 christos str_1++;
143 1.1 christos j = strtol (str_1, &str_1, 10);
144 1.1 christos get_internal_label (ep, j, *str_1 == 'f');
145 1.1 christos return NULL;
146 1.1 christos }
147 1.1 christos save_in = input_line_pointer;
148 1.1 christos input_line_pointer = (char *)str;
149 1.1 christos expression (ep);
150 1.1 christos ret = input_line_pointer;
151 1.1 christos input_line_pointer = save_in;
152 1.1 christos return ret;
153 1.1 christos }
154 1.1 christos
155 1.1 christos static void
156 1.1 christos reloc (const char *op_c_str, const char *id_c_str, offsetT addend)
157 1.1 christos {
158 1.1 christos expressionS id_sym_expr;
159 1.1 christos
160 1.1 christos if (end <= top)
161 1.1 christos as_fatal (_("expr too huge"));
162 1.1 christos
163 1.1 christos if (id_c_str)
164 1.1 christos {
165 1.1 christos my_getExpression (&id_sym_expr, id_c_str);
166 1.1 christos id_sym_expr.X_add_number += addend;
167 1.1 christos }
168 1.1 christos else
169 1.1 christos {
170 1.1 christos id_sym_expr.X_op = O_constant;
171 1.1 christos id_sym_expr.X_add_number = addend;
172 1.1 christos }
173 1.1 christos
174 1.1 christos if (strcmp (op_c_str, "abs") == 0)
175 1.1 christos {
176 1.1 christos top->value = id_sym_expr;
177 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_ABSOLUTE;
178 1.1 christos top++;
179 1.1 christos }
180 1.1 christos else if (strcmp (op_c_str, "pcrel") == 0)
181 1.1 christos {
182 1.1 christos top->value = id_sym_expr;
183 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_PCREL;
184 1.1 christos top++;
185 1.1 christos }
186 1.1 christos else if (strcmp (op_c_str, "gprel") == 0)
187 1.1 christos {
188 1.1 christos top->value = id_sym_expr;
189 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_GPREL;
190 1.1 christos top++;
191 1.1 christos }
192 1.1 christos else if (strcmp (op_c_str, "tprel") == 0)
193 1.1 christos {
194 1.1 christos top->value = id_sym_expr;
195 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_TLS_TPREL;
196 1.1 christos top++;
197 1.1 christos }
198 1.1 christos else if (strcmp (op_c_str, "tlsgot") == 0)
199 1.1 christos {
200 1.1 christos top->value = id_sym_expr;
201 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_TLS_GOT;
202 1.1 christos top++;
203 1.1 christos }
204 1.1 christos else if (strcmp (op_c_str, "tlsgd") == 0)
205 1.1 christos {
206 1.1 christos top->value = id_sym_expr;
207 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_TLS_GD;
208 1.1 christos top++;
209 1.1 christos }
210 1.1 christos else if (strcmp (op_c_str, "plt") == 0)
211 1.1 christos {
212 1.1 christos top->value = id_sym_expr;
213 1.1 christos top->type = BFD_RELOC_LARCH_SOP_PUSH_PLT_PCREL;
214 1.1 christos top++;
215 1.1 christos }
216 1.1 christos else
217 1.1 christos as_fatal (_("unknown reloc hint: %s"), op_c_str);
218 1.1 christos }
219 1.1 christos
220 1.1 christos static void
221 1.1 christos emit_unary (char op)
222 1.1 christos {
223 1.1 christos struct reloc_info *s_top = top - 1;
224 1.1 christos if (is_const (s_top))
225 1.1 christos {
226 1.1 christos offsetT opr = s_top->value.X_add_number;
227 1.1 christos switch (op)
228 1.1 christos {
229 1.1 christos case '+':
230 1.1 christos break;
231 1.1 christos case '-':
232 1.1 christos opr = -opr;
233 1.1 christos break;
234 1.1 christos case '~':
235 1.1 christos opr = ~opr;
236 1.1 christos break;
237 1.1 christos case '!':
238 1.1 christos opr = !opr;
239 1.1 christos break;
240 1.1 christos default:
241 1.1 christos abort ();
242 1.1 christos }
243 1.1 christos s_top->value.X_add_number = opr;
244 1.1 christos }
245 1.1 christos else
246 1.1 christos {
247 1.1 christos if (end <= top)
248 1.1 christos as_fatal (_("expr too huge"));
249 1.1 christos switch (op)
250 1.1 christos {
251 1.1 christos case '!':
252 1.1 christos top->type = BFD_RELOC_LARCH_SOP_NOT;
253 1.1 christos break;
254 1.1 christos default:
255 1.1 christos abort ();
256 1.1 christos }
257 1.1 christos top->value = const_0;
258 1.1 christos top++;
259 1.1 christos }
260 1.1 christos }
261 1.1 christos
262 1.1 christos static void
263 1.1 christos emit_bin (int op)
264 1.1 christos {
265 1.1 christos struct reloc_info *last_1st = top - 1, *last_2nd = top - 2;
266 1.1 christos if (is_const (last_1st) && is_const (last_2nd))
267 1.1 christos {
268 1.1 christos offsetT opr1 = last_2nd->value.X_add_number;
269 1.1 christos offsetT opr2 = last_1st->value.X_add_number;
270 1.1 christos switch (op)
271 1.1 christos {
272 1.1 christos case '*':
273 1.1 christos opr1 = opr1 * opr2;
274 1.1 christos break;
275 1.1 christos case '/':
276 1.1 christos opr1 = opr1 / opr2;
277 1.1 christos break;
278 1.1 christos case '%':
279 1.1 christos opr1 = opr1 % opr2;
280 1.1 christos break;
281 1.1 christos case '+':
282 1.1 christos opr1 = opr1 + opr2;
283 1.1 christos break;
284 1.1 christos case '-':
285 1.1 christos opr1 = opr1 - opr2;
286 1.1 christos break;
287 1.1 christos case LEFT_OP:
288 1.1 christos opr1 = opr1 << opr2;
289 1.1 christos break;
290 1.1 christos case RIGHT_OP:
291 1.1 christos /* Algorithm right shift. */
292 1.1 christos opr1 = (offsetT)opr1 >> (offsetT)opr2;
293 1.1 christos break;
294 1.1 christos case '<':
295 1.1 christos opr1 = opr1 < opr2;
296 1.1 christos break;
297 1.1 christos case '>':
298 1.1 christos opr1 = opr1 > opr2;
299 1.1 christos break;
300 1.1 christos case LE_OP:
301 1.1 christos opr1 = opr1 <= opr2;
302 1.1 christos break;
303 1.1 christos case GE_OP:
304 1.1 christos opr1 = opr1 >= opr2;
305 1.1 christos break;
306 1.1 christos case EQ_OP:
307 1.1 christos opr1 = opr1 == opr2;
308 1.1 christos break;
309 1.1 christos case NE_OP:
310 1.1 christos opr1 = opr1 != opr2;
311 1.1 christos break;
312 1.1 christos case '&':
313 1.1 christos opr1 = opr1 & opr2;
314 1.1 christos break;
315 1.1 christos case '^':
316 1.1 christos opr1 = opr1 ^ opr2;
317 1.1 christos break;
318 1.1 christos case '|':
319 1.1 christos opr1 = opr1 | opr2;
320 1.1 christos break;
321 1.1 christos case AND_OP:
322 1.1 christos opr1 = opr1 && opr2;
323 1.1 christos break;
324 1.1 christos case OR_OP:
325 1.1 christos opr1 = opr1 || opr2;
326 1.1 christos break;
327 1.1 christos default:
328 1.1 christos abort ();
329 1.1 christos }
330 1.1 christos last_2nd->value.X_add_number = opr1;
331 1.1 christos last_1st->type = 0;
332 1.1 christos top--;
333 1.1 christos }
334 1.1 christos else
335 1.1 christos {
336 1.1 christos if (end <= top)
337 1.1 christos as_fatal (_("expr too huge"));
338 1.1 christos switch (op)
339 1.1 christos {
340 1.1 christos case '+':
341 1.1 christos top->type = BFD_RELOC_LARCH_SOP_ADD;
342 1.1 christos break;
343 1.1 christos case '-':
344 1.1 christos top->type = BFD_RELOC_LARCH_SOP_SUB;
345 1.1 christos break;
346 1.1 christos case LEFT_OP:
347 1.1 christos top->type = BFD_RELOC_LARCH_SOP_SL;
348 1.1 christos break;
349 1.1 christos case RIGHT_OP:
350 1.1 christos top->type = BFD_RELOC_LARCH_SOP_SR;
351 1.1 christos break;
352 1.1 christos case '&':
353 1.1 christos top->type = BFD_RELOC_LARCH_SOP_AND;
354 1.1 christos break;
355 1.1 christos default:
356 1.1 christos abort ();
357 1.1 christos }
358 1.1 christos top->value = const_0;
359 1.1 christos top++;
360 1.1 christos }
361 1.1 christos }
362 1.1 christos
363 1.1 christos static void
364 1.1 christos emit_if_else (void)
365 1.1 christos {
366 1.1 christos struct reloc_info *last_1st = top - 1;
367 1.1 christos struct reloc_info *last_2nd = top - 2;
368 1.1 christos struct reloc_info *last_3rd = top - 3;
369 1.1 christos if (is_const (last_1st) && is_const (last_2nd) && is_const (last_3rd))
370 1.1 christos {
371 1.1 christos offsetT opr1 = last_3rd->value.X_add_number;
372 1.1 christos offsetT opr2 = last_2nd->value.X_add_number;
373 1.1 christos offsetT opr3 = last_1st->value.X_add_number;
374 1.1 christos opr1 = opr1 ? opr2 : opr3;
375 1.1 christos last_3rd->value.X_add_number = opr1;
376 1.1 christos last_2nd->type = 0;
377 1.1 christos last_1st->type = 0;
378 1.1 christos top -= 2;
379 1.1 christos }
380 1.1 christos else
381 1.1 christos {
382 1.1 christos if (end <= top)
383 1.1 christos as_fatal (_("expr too huge"));
384 1.1 christos top->type = BFD_RELOC_LARCH_SOP_IF_ELSE;
385 1.1 christos top->value = const_0;
386 1.1 christos top++;
387 1.1 christos }
388 1.1 christos }
389 1.1 christos
390 1.1 christos
391 1.1 christos #line 392 "config/loongarch-parse.c"
392 1.1 christos
393 1.1 christos # ifndef YY_CAST
394 1.1 christos # ifdef __cplusplus
395 1.1 christos # define YY_CAST(Type, Val) static_cast<Type> (Val)
396 1.1 christos # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
397 1.1 christos # else
398 1.1 christos # define YY_CAST(Type, Val) ((Type) (Val))
399 1.1 christos # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
400 1.1 christos # endif
401 1.1 christos # endif
402 1.1 christos # ifndef YY_NULLPTR
403 1.1 christos # if defined __cplusplus
404 1.1 christos # if 201103L <= __cplusplus
405 1.1 christos # define YY_NULLPTR nullptr
406 1.1 christos # else
407 1.1 christos # define YY_NULLPTR 0
408 1.1 christos # endif
409 1.1 christos # else
410 1.1 christos # define YY_NULLPTR ((void*)0)
411 1.1 christos # endif
412 1.1 christos # endif
413 1.1 christos
414 1.1 christos /* Use api.header.include to #include this header
415 1.1 christos instead of duplicating it here. */
416 1.1 christos #ifndef YY_YY_CONFIG_LOONGARCH_PARSE_H_INCLUDED
417 1.1 christos # define YY_YY_CONFIG_LOONGARCH_PARSE_H_INCLUDED
418 1.1 christos /* Debug traces. */
419 1.1 christos #ifndef YYDEBUG
420 1.1 christos # define YYDEBUG 0
421 1.1 christos #endif
422 1.1 christos #if YYDEBUG
423 1.1 christos extern int yydebug;
424 1.1 christos #endif
425 1.1 christos
426 1.1 christos /* Token kinds. */
427 1.1 christos #ifndef YYTOKENTYPE
428 1.1 christos # define YYTOKENTYPE
429 1.1 christos enum yytokentype
430 1.1 christos {
431 1.1 christos YYEMPTY = -2,
432 1.1 christos YYEOF = 0, /* "end of file" */
433 1.1 christos YYerror = 256, /* error */
434 1.1 christos YYUNDEF = 257, /* "invalid token" */
435 1.1 christos INTEGER = 258, /* INTEGER */
436 1.1 christos IDENTIFIER = 259, /* IDENTIFIER */
437 1.1 christos LEFT_OP = 260, /* LEFT_OP */
438 1.1 christos RIGHT_OP = 261, /* RIGHT_OP */
439 1.1 christos LE_OP = 262, /* LE_OP */
440 1.1 christos GE_OP = 263, /* GE_OP */
441 1.1 christos EQ_OP = 264, /* EQ_OP */
442 1.1 christos NE_OP = 265, /* NE_OP */
443 1.1 christos AND_OP = 266, /* AND_OP */
444 1.1 christos OR_OP = 267 /* OR_OP */
445 1.1 christos };
446 1.1 christos typedef enum yytokentype yytoken_kind_t;
447 1.1 christos #endif
448 1.1 christos /* Token kinds. */
449 1.1 christos #define YYEMPTY -2
450 1.1 christos #define YYEOF 0
451 1.1 christos #define YYerror 256
452 1.1 christos #define YYUNDEF 257
453 1.1 christos #define INTEGER 258
454 1.1 christos #define IDENTIFIER 259
455 1.1 christos #define LEFT_OP 260
456 1.1 christos #define RIGHT_OP 261
457 1.1 christos #define LE_OP 262
458 1.1 christos #define GE_OP 263
459 1.1 christos #define EQ_OP 264
460 1.1 christos #define NE_OP 265
461 1.1 christos #define AND_OP 266
462 1.1 christos #define OR_OP 267
463 1.1 christos
464 1.1 christos /* Value type. */
465 1.1 christos #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
466 1.1 christos union YYSTYPE
467 1.1 christos {
468 1.1 christos #line 340 "./config/loongarch-parse.y"
469 1.1 christos
470 1.1 christos char *c_str;
471 1.1 christos offsetT imm;
472 1.1 christos
473 1.1 christos #line 474 "config/loongarch-parse.c"
474 1.1 christos
475 1.1 christos };
476 1.1 christos typedef union YYSTYPE YYSTYPE;
477 1.1 christos # define YYSTYPE_IS_TRIVIAL 1
478 1.1 christos # define YYSTYPE_IS_DECLARED 1
479 1.1 christos #endif
480 1.1 christos
481 1.1 christos
482 1.1 christos extern YYSTYPE yylval;
483 1.1 christos
484 1.1 christos
485 1.1 christos int yyparse (void);
486 1.1 christos
487 1.1 christos
488 1.1 christos #endif /* !YY_YY_CONFIG_LOONGARCH_PARSE_H_INCLUDED */
489 1.1 christos /* Symbol kind. */
490 1.1 christos enum yysymbol_kind_t
491 1.1 christos {
492 1.1 christos YYSYMBOL_YYEMPTY = -2,
493 1.1 christos YYSYMBOL_YYEOF = 0, /* "end of file" */
494 1.1 christos YYSYMBOL_YYerror = 1, /* error */
495 1.1 christos YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
496 1.1 christos YYSYMBOL_INTEGER = 3, /* INTEGER */
497 1.1 christos YYSYMBOL_IDENTIFIER = 4, /* IDENTIFIER */
498 1.1 christos YYSYMBOL_LEFT_OP = 5, /* LEFT_OP */
499 1.1 christos YYSYMBOL_RIGHT_OP = 6, /* RIGHT_OP */
500 1.1 christos YYSYMBOL_LE_OP = 7, /* LE_OP */
501 1.1 christos YYSYMBOL_GE_OP = 8, /* GE_OP */
502 1.1 christos YYSYMBOL_EQ_OP = 9, /* EQ_OP */
503 1.1 christos YYSYMBOL_NE_OP = 10, /* NE_OP */
504 1.1 christos YYSYMBOL_AND_OP = 11, /* AND_OP */
505 1.1 christos YYSYMBOL_OR_OP = 12, /* OR_OP */
506 1.1 christos YYSYMBOL_13_ = 13, /* '(' */
507 1.1 christos YYSYMBOL_14_ = 14, /* ')' */
508 1.1 christos YYSYMBOL_15_ = 15, /* '%' */
509 1.1 christos YYSYMBOL_16_ = 16, /* '-' */
510 1.1 christos YYSYMBOL_17_ = 17, /* '+' */
511 1.1 christos YYSYMBOL_18_ = 18, /* '~' */
512 1.1 christos YYSYMBOL_19_ = 19, /* '!' */
513 1.1 christos YYSYMBOL_20_ = 20, /* '*' */
514 1.1 christos YYSYMBOL_21_ = 21, /* '/' */
515 1.1 christos YYSYMBOL_22_ = 22, /* '<' */
516 1.1 christos YYSYMBOL_23_ = 23, /* '>' */
517 1.1 christos YYSYMBOL_24_ = 24, /* '&' */
518 1.1 christos YYSYMBOL_25_ = 25, /* '^' */
519 1.1 christos YYSYMBOL_26_ = 26, /* '|' */
520 1.1 christos YYSYMBOL_27_ = 27, /* '?' */
521 1.1 christos YYSYMBOL_28_ = 28, /* ':' */
522 1.1 christos YYSYMBOL_YYACCEPT = 29, /* $accept */
523 1.1 christos YYSYMBOL_primary_expression = 30, /* primary_expression */
524 1.1 christos YYSYMBOL_addend = 31, /* addend */
525 1.1 christos YYSYMBOL_unary_expression = 32, /* unary_expression */
526 1.1 christos YYSYMBOL_multiplicative_expression = 33, /* multiplicative_expression */
527 1.1 christos YYSYMBOL_additive_expression = 34, /* additive_expression */
528 1.1 christos YYSYMBOL_shift_expression = 35, /* shift_expression */
529 1.1 christos YYSYMBOL_relational_expression = 36, /* relational_expression */
530 1.1 christos YYSYMBOL_equality_expression = 37, /* equality_expression */
531 1.1 christos YYSYMBOL_and_expression = 38, /* and_expression */
532 1.1 christos YYSYMBOL_exclusive_or_expression = 39, /* exclusive_or_expression */
533 1.1 christos YYSYMBOL_inclusive_or_expression = 40, /* inclusive_or_expression */
534 1.1 christos YYSYMBOL_logical_and_expression = 41, /* logical_and_expression */
535 1.1 christos YYSYMBOL_logical_or_expression = 42, /* logical_or_expression */
536 1.1 christos YYSYMBOL_conditional_expression = 43, /* conditional_expression */
537 1.1 christos YYSYMBOL_expression = 44 /* expression */
538 1.1 christos };
539 1.1 christos typedef enum yysymbol_kind_t yysymbol_kind_t;
540 1.1 christos
541 1.1 christos
542 1.1 christos
543 1.1 christos
544 1.1 christos #ifdef short
545 1.1 christos # undef short
546 1.1 christos #endif
547 1.1 christos
548 1.1 christos /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
549 1.1 christos <limits.h> and (if available) <stdint.h> are included
550 1.1 christos so that the code can choose integer types of a good width. */
551 1.1 christos
552 1.1 christos #ifndef __PTRDIFF_MAX__
553 1.1 christos # include <limits.h> /* INFRINGES ON USER NAME SPACE */
554 1.1 christos # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
555 1.1 christos # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
556 1.1 christos # define YY_STDINT_H
557 1.1 christos # endif
558 1.1 christos #endif
559 1.1 christos
560 1.1 christos /* Narrow types that promote to a signed type and that can represent a
561 1.1 christos signed or unsigned integer of at least N bits. In tables they can
562 1.1 christos save space and decrease cache pressure. Promoting to a signed type
563 1.1 christos helps avoid bugs in integer arithmetic. */
564 1.1 christos
565 1.1 christos #ifdef __INT_LEAST8_MAX__
566 1.1 christos typedef __INT_LEAST8_TYPE__ yytype_int8;
567 1.1 christos #elif defined YY_STDINT_H
568 1.1 christos typedef int_least8_t yytype_int8;
569 1.1 christos #else
570 1.1 christos typedef signed char yytype_int8;
571 1.1 christos #endif
572 1.1 christos
573 1.1 christos #ifdef __INT_LEAST16_MAX__
574 1.1 christos typedef __INT_LEAST16_TYPE__ yytype_int16;
575 1.1 christos #elif defined YY_STDINT_H
576 1.1 christos typedef int_least16_t yytype_int16;
577 1.1 christos #else
578 1.1 christos typedef short yytype_int16;
579 1.1 christos #endif
580 1.1 christos
581 1.1 christos /* Work around bug in HP-UX 11.23, which defines these macros
582 1.1 christos incorrectly for preprocessor constants. This workaround can likely
583 1.1 christos be removed in 2023, as HPE has promised support for HP-UX 11.23
584 1.1 christos (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
585 1.1 christos <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
586 1.1 christos #ifdef __hpux
587 1.1 christos # undef UINT_LEAST8_MAX
588 1.1 christos # undef UINT_LEAST16_MAX
589 1.1 christos # define UINT_LEAST8_MAX 255
590 1.1 christos # define UINT_LEAST16_MAX 65535
591 1.1 christos #endif
592 1.1 christos
593 1.1 christos #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
594 1.1 christos typedef __UINT_LEAST8_TYPE__ yytype_uint8;
595 1.1 christos #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
596 1.1 christos && UINT_LEAST8_MAX <= INT_MAX)
597 1.1 christos typedef uint_least8_t yytype_uint8;
598 1.1 christos #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
599 1.1 christos typedef unsigned char yytype_uint8;
600 1.1 christos #else
601 1.1 christos typedef short yytype_uint8;
602 1.1 christos #endif
603 1.1 christos
604 1.1 christos #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
605 1.1 christos typedef __UINT_LEAST16_TYPE__ yytype_uint16;
606 1.1 christos #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
607 1.1 christos && UINT_LEAST16_MAX <= INT_MAX)
608 1.1 christos typedef uint_least16_t yytype_uint16;
609 1.1 christos #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
610 1.1 christos typedef unsigned short yytype_uint16;
611 1.1 christos #else
612 1.1 christos typedef int yytype_uint16;
613 1.1 christos #endif
614 1.1 christos
615 1.1 christos #ifndef YYPTRDIFF_T
616 1.1 christos # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
617 1.1 christos # define YYPTRDIFF_T __PTRDIFF_TYPE__
618 1.1 christos # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
619 1.1 christos # elif defined PTRDIFF_MAX
620 1.1 christos # ifndef ptrdiff_t
621 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
622 1.1 christos # endif
623 1.1 christos # define YYPTRDIFF_T ptrdiff_t
624 1.1 christos # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
625 1.1 christos # else
626 1.1 christos # define YYPTRDIFF_T long
627 1.1 christos # define YYPTRDIFF_MAXIMUM LONG_MAX
628 1.1 christos # endif
629 1.1 christos #endif
630 1.1 christos
631 1.1 christos #ifndef YYSIZE_T
632 1.1 christos # ifdef __SIZE_TYPE__
633 1.1 christos # define YYSIZE_T __SIZE_TYPE__
634 1.1 christos # elif defined size_t
635 1.1 christos # define YYSIZE_T size_t
636 1.1 christos # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
637 1.1 christos # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
638 1.1 christos # define YYSIZE_T size_t
639 1.1 christos # else
640 1.1 christos # define YYSIZE_T unsigned
641 1.1 christos # endif
642 1.1 christos #endif
643 1.1 christos
644 1.1 christos #define YYSIZE_MAXIMUM \
645 1.1 christos YY_CAST (YYPTRDIFF_T, \
646 1.1 christos (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
647 1.1 christos ? YYPTRDIFF_MAXIMUM \
648 1.1 christos : YY_CAST (YYSIZE_T, -1)))
649 1.1 christos
650 1.1 christos #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
651 1.1 christos
652 1.1 christos
653 1.1 christos /* Stored state numbers (used for stacks). */
654 1.1 christos typedef yytype_int8 yy_state_t;
655 1.1 christos
656 1.1 christos /* State numbers in computations. */
657 1.1 christos typedef int yy_state_fast_t;
658 1.1 christos
659 1.1 christos #ifndef YY_
660 1.1 christos # if defined YYENABLE_NLS && YYENABLE_NLS
661 1.1 christos # if ENABLE_NLS
662 1.1 christos # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
663 1.1 christos # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
664 1.1 christos # endif
665 1.1 christos # endif
666 1.1 christos # ifndef YY_
667 1.1 christos # define YY_(Msgid) Msgid
668 1.1 christos # endif
669 1.1 christos #endif
670 1.1 christos
671 1.1 christos
672 1.1 christos #ifndef YY_ATTRIBUTE_PURE
673 1.1 christos # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
674 1.1 christos # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
675 1.1 christos # else
676 1.1 christos # define YY_ATTRIBUTE_PURE
677 1.1 christos # endif
678 1.1 christos #endif
679 1.1 christos
680 1.1 christos #ifndef YY_ATTRIBUTE_UNUSED
681 1.1 christos # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
682 1.1 christos # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
683 1.1 christos # else
684 1.1 christos # define YY_ATTRIBUTE_UNUSED
685 1.1 christos # endif
686 1.1 christos #endif
687 1.1 christos
688 1.1 christos /* Suppress unused-variable warnings by "using" E. */
689 1.1 christos #if ! defined lint || defined __GNUC__
690 1.1 christos # define YY_USE(E) ((void) (E))
691 1.1 christos #else
692 1.1 christos # define YY_USE(E) /* empty */
693 1.1 christos #endif
694 1.1 christos
695 1.1 christos /* Suppress an incorrect diagnostic about yylval being uninitialized. */
696 1.1 christos #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
697 1.1 christos # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
698 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
699 1.1 christos _Pragma ("GCC diagnostic push") \
700 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
701 1.1 christos # else
702 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
703 1.1 christos _Pragma ("GCC diagnostic push") \
704 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
705 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
706 1.1 christos # endif
707 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
708 1.1 christos _Pragma ("GCC diagnostic pop")
709 1.1 christos #else
710 1.1 christos # define YY_INITIAL_VALUE(Value) Value
711 1.1 christos #endif
712 1.1 christos #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
713 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
714 1.1 christos # define YY_IGNORE_MAYBE_UNINITIALIZED_END
715 1.1 christos #endif
716 1.1 christos #ifndef YY_INITIAL_VALUE
717 1.1 christos # define YY_INITIAL_VALUE(Value) /* Nothing. */
718 1.1 christos #endif
719 1.1 christos
720 1.1 christos #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
721 1.1 christos # define YY_IGNORE_USELESS_CAST_BEGIN \
722 1.1 christos _Pragma ("GCC diagnostic push") \
723 1.1 christos _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
724 1.1 christos # define YY_IGNORE_USELESS_CAST_END \
725 1.1 christos _Pragma ("GCC diagnostic pop")
726 1.1 christos #endif
727 1.1 christos #ifndef YY_IGNORE_USELESS_CAST_BEGIN
728 1.1 christos # define YY_IGNORE_USELESS_CAST_BEGIN
729 1.1 christos # define YY_IGNORE_USELESS_CAST_END
730 1.1 christos #endif
731 1.1 christos
732 1.1 christos
733 1.1 christos #define YY_ASSERT(E) ((void) (0 && (E)))
734 1.1 christos
735 1.1 christos #if !defined yyoverflow
736 1.1 christos
737 1.1 christos /* The parser invokes alloca or malloc; define the necessary symbols. */
738 1.1 christos
739 1.1 christos # ifdef YYSTACK_USE_ALLOCA
740 1.1 christos # if YYSTACK_USE_ALLOCA
741 1.1 christos # ifdef __GNUC__
742 1.1 christos # define YYSTACK_ALLOC __builtin_alloca
743 1.1 christos # elif defined __BUILTIN_VA_ARG_INCR
744 1.1 christos # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
745 1.1 christos # elif defined _AIX
746 1.1 christos # define YYSTACK_ALLOC __alloca
747 1.1 christos # elif defined _MSC_VER
748 1.1 christos # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
749 1.1 christos # define alloca _alloca
750 1.1 christos # else
751 1.1 christos # define YYSTACK_ALLOC alloca
752 1.1 christos # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
753 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
754 1.1 christos /* Use EXIT_SUCCESS as a witness for stdlib.h. */
755 1.1 christos # ifndef EXIT_SUCCESS
756 1.1 christos # define EXIT_SUCCESS 0
757 1.1 christos # endif
758 1.1 christos # endif
759 1.1 christos # endif
760 1.1 christos # endif
761 1.1 christos # endif
762 1.1 christos
763 1.1 christos # ifdef YYSTACK_ALLOC
764 1.1 christos /* Pacify GCC's 'empty if-body' warning. */
765 1.1 christos # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
766 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
767 1.1 christos /* The OS might guarantee only one guard page at the bottom of the stack,
768 1.1 christos and a page size can be as small as 4096 bytes. So we cannot safely
769 1.1 christos invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
770 1.1 christos to allow for a few compiler-allocated temporary stack slots. */
771 1.1 christos # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
772 1.1 christos # endif
773 1.1 christos # else
774 1.1 christos # define YYSTACK_ALLOC YYMALLOC
775 1.1 christos # define YYSTACK_FREE YYFREE
776 1.1 christos # ifndef YYSTACK_ALLOC_MAXIMUM
777 1.1 christos # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
778 1.1 christos # endif
779 1.1 christos # if (defined __cplusplus && ! defined EXIT_SUCCESS \
780 1.1 christos && ! ((defined YYMALLOC || defined malloc) \
781 1.1 christos && (defined YYFREE || defined free)))
782 1.1 christos # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
783 1.1 christos # ifndef EXIT_SUCCESS
784 1.1 christos # define EXIT_SUCCESS 0
785 1.1 christos # endif
786 1.1 christos # endif
787 1.1 christos # ifndef YYMALLOC
788 1.1 christos # define YYMALLOC malloc
789 1.1 christos # if ! defined malloc && ! defined EXIT_SUCCESS
790 1.1 christos void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
791 1.1 christos # endif
792 1.1 christos # endif
793 1.1 christos # ifndef YYFREE
794 1.1 christos # define YYFREE free
795 1.1 christos # if ! defined free && ! defined EXIT_SUCCESS
796 1.1 christos void free (void *); /* INFRINGES ON USER NAME SPACE */
797 1.1 christos # endif
798 1.1 christos # endif
799 1.1 christos # endif
800 1.1 christos #endif /* !defined yyoverflow */
801 1.1 christos
802 1.1 christos #if (! defined yyoverflow \
803 1.1 christos && (! defined __cplusplus \
804 1.1 christos || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
805 1.1 christos
806 1.1 christos /* A type that is properly aligned for any stack member. */
807 1.1 christos union yyalloc
808 1.1 christos {
809 1.1 christos yy_state_t yyss_alloc;
810 1.1 christos YYSTYPE yyvs_alloc;
811 1.1 christos };
812 1.1 christos
813 1.1 christos /* The size of the maximum gap between one aligned stack and the next. */
814 1.1 christos # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
815 1.1 christos
816 1.1 christos /* The size of an array large to enough to hold all stacks, each with
817 1.1 christos N elements. */
818 1.1 christos # define YYSTACK_BYTES(N) \
819 1.1 christos ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
820 1.1 christos + YYSTACK_GAP_MAXIMUM)
821 1.1 christos
822 1.1 christos # define YYCOPY_NEEDED 1
823 1.1 christos
824 1.1 christos /* Relocate STACK from its old location to the new one. The
825 1.1 christos local variables YYSIZE and YYSTACKSIZE give the old and new number of
826 1.1 christos elements in the stack, and YYPTR gives the new location of the
827 1.1 christos stack. Advance YYPTR to a properly aligned location for the next
828 1.1 christos stack. */
829 1.1 christos # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
830 1.1 christos do \
831 1.1 christos { \
832 1.1 christos YYPTRDIFF_T yynewbytes; \
833 1.1 christos YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
834 1.1 christos Stack = &yyptr->Stack_alloc; \
835 1.1 christos yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
836 1.1 christos yyptr += yynewbytes / YYSIZEOF (*yyptr); \
837 1.1 christos } \
838 1.1 christos while (0)
839 1.1 christos
840 1.1 christos #endif
841 1.1 christos
842 1.1 christos #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
843 1.1 christos /* Copy COUNT objects from SRC to DST. The source and destination do
844 1.1 christos not overlap. */
845 1.1 christos # ifndef YYCOPY
846 1.1 christos # if defined __GNUC__ && 1 < __GNUC__
847 1.1 christos # define YYCOPY(Dst, Src, Count) \
848 1.1 christos __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
849 1.1 christos # else
850 1.1 christos # define YYCOPY(Dst, Src, Count) \
851 1.1 christos do \
852 1.1 christos { \
853 1.1 christos YYPTRDIFF_T yyi; \
854 1.1 christos for (yyi = 0; yyi < (Count); yyi++) \
855 1.1 christos (Dst)[yyi] = (Src)[yyi]; \
856 1.1 christos } \
857 1.1 christos while (0)
858 1.1 christos # endif
859 1.1 christos # endif
860 1.1 christos #endif /* !YYCOPY_NEEDED */
861 1.1 christos
862 1.1 christos /* YYFINAL -- State number of the termination state. */
863 1.1 christos #define YYFINAL 47
864 1.1 christos /* YYLAST -- Last index in YYTABLE. */
865 1.1 christos #define YYLAST 73
866 1.1 christos
867 1.1 christos /* YYNTOKENS -- Number of terminals. */
868 1.1 christos #define YYNTOKENS 29
869 1.1 christos /* YYNNTS -- Number of nonterminals. */
870 1.1 christos #define YYNNTS 16
871 1.1 christos /* YYNRULES -- Number of rules. */
872 1.1 christos #define YYNRULES 44
873 1.1 christos /* YYNSTATES -- Number of states. */
874 1.1 christos #define YYNSTATES 81
875 1.1 christos
876 1.1 christos /* YYMAXUTOK -- Last valid token kind. */
877 1.1 christos #define YYMAXUTOK 267
878 1.1 christos
879 1.1 christos
880 1.1 christos /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
881 1.1 christos as returned by yylex, with out-of-bounds checking. */
882 1.1 christos #define YYTRANSLATE(YYX) \
883 1.1 christos (0 <= (YYX) && (YYX) <= YYMAXUTOK \
884 1.1 christos ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
885 1.1 christos : YYSYMBOL_YYUNDEF)
886 1.1 christos
887 1.1 christos /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
888 1.1 christos as returned by yylex. */
889 1.1 christos static const yytype_int8 yytranslate[] =
890 1.1 christos {
891 1.1 christos 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
892 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
893 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
894 1.1 christos 2, 2, 2, 19, 2, 2, 2, 15, 24, 2,
895 1.1 christos 13, 14, 20, 17, 2, 16, 2, 21, 2, 2,
896 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 28, 2,
897 1.1 christos 22, 2, 23, 27, 2, 2, 2, 2, 2, 2,
898 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
899 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
900 1.1 christos 2, 2, 2, 2, 25, 2, 2, 2, 2, 2,
901 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
902 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
903 1.1 christos 2, 2, 2, 2, 26, 2, 18, 2, 2, 2,
904 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
905 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
906 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
907 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
908 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
909 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
910 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
911 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
912 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
913 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
914 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
915 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
916 1.1 christos 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
917 1.1 christos 5, 6, 7, 8, 9, 10, 11, 12
918 1.1 christos };
919 1.1 christos
920 1.1 christos #if YYDEBUG
921 1.1 christos /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
922 1.1 christos static const yytype_int16 yyrline[] =
923 1.1 christos {
924 1.1 christos 0, 354, 354, 355, 356, 357, 361, 362, 363, 367,
925 1.1 christos 368, 369, 370, 371, 375, 376, 377, 378, 382, 383,
926 1.1 christos 384, 388, 389, 390, 394, 395, 396, 397, 398, 402,
927 1.1 christos 403, 404, 408, 409, 413, 414, 418, 419, 423, 424,
928 1.1 christos 428, 429, 433, 434, 438
929 1.1 christos };
930 1.1 christos #endif
931 1.1 christos
932 1.1 christos /** Accessing symbol of state STATE. */
933 1.1 christos #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
934 1.1 christos
935 1.1 christos #if YYDEBUG || 0
936 1.1 christos /* The user-facing name of the symbol whose (internal) number is
937 1.1 christos YYSYMBOL. No bounds checking. */
938 1.1 christos static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
939 1.1 christos
940 1.1 christos /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
941 1.1 christos First, the terminals, then, starting at YYNTOKENS, nonterminals. */
942 1.1 christos static const char *const yytname[] =
943 1.1 christos {
944 1.1 christos "\"end of file\"", "error", "\"invalid token\"", "INTEGER",
945 1.1 christos "IDENTIFIER", "LEFT_OP", "RIGHT_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP",
946 1.1 christos "AND_OP", "OR_OP", "'('", "')'", "'%'", "'-'", "'+'", "'~'", "'!'",
947 1.1 christos "'*'", "'/'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "$accept",
948 1.1 christos "primary_expression", "addend", "unary_expression",
949 1.1 christos "multiplicative_expression", "additive_expression", "shift_expression",
950 1.1 christos "relational_expression", "equality_expression", "and_expression",
951 1.1 christos "exclusive_or_expression", "inclusive_or_expression",
952 1.1 christos "logical_and_expression", "logical_or_expression",
953 1.1 christos "conditional_expression", "expression", YY_NULLPTR
954 1.1 christos };
955 1.1 christos
956 1.1 christos static const char *
957 1.1 christos yysymbol_name (yysymbol_kind_t yysymbol)
958 1.1 christos {
959 1.1 christos return yytname[yysymbol];
960 1.1 christos }
961 1.1 christos #endif
962 1.1 christos
963 1.1 christos #define YYPACT_NINF (-11)
964 1.1 christos
965 1.1 christos #define yypact_value_is_default(Yyn) \
966 1.1 christos ((Yyn) == YYPACT_NINF)
967 1.1 christos
968 1.1 christos #define YYTABLE_NINF (-1)
969 1.1 christos
970 1.1 christos #define yytable_value_is_error(Yyn) \
971 1.1 christos 0
972 1.1 christos
973 1.1 christos /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
974 1.1 christos STATE-NUM. */
975 1.1 christos static const yytype_int8 yypact[] =
976 1.1 christos {
977 1.1 christos 2, -11, 2, 10, 2, 2, 2, 2, -11, -11,
978 1.1 christos -9, -7, 36, 0, 37, -8, -1, 8, 27, 1,
979 1.1 christos -11, 43, 31, 40, -11, -11, -11, -11, 2, 2,
980 1.1 christos 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
981 1.1 christos 2, 2, 2, 2, 2, 2, 2, -11, -11, 45,
982 1.1 christos -11, -11, -11, -9, -9, -7, -7, 36, 36, 36,
983 1.1 christos 36, 0, 0, 37, -8, -1, 8, 27, 22, -11,
984 1.1 christos -11, 2, 19, 23, -11, -11, 55, 56, -11, -11,
985 1.1 christos -11
986 1.1 christos };
987 1.1 christos
988 1.1 christos /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
989 1.1 christos Performed when YYTABLE does not specify something else to do. Zero
990 1.1 christos means the default is an error. */
991 1.1 christos static const yytype_int8 yydefact[] =
992 1.1 christos {
993 1.1 christos 0, 2, 0, 0, 0, 0, 0, 0, 9, 14,
994 1.1 christos 18, 21, 24, 29, 32, 34, 36, 38, 40, 42,
995 1.1 christos 44, 0, 0, 0, 11, 10, 12, 13, 0, 0,
996 1.1 christos 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
997 1.1 christos 0, 0, 0, 0, 0, 0, 0, 1, 3, 0,
998 1.1 christos 17, 15, 16, 20, 19, 22, 23, 27, 28, 25,
999 1.1 christos 26, 30, 31, 33, 35, 37, 39, 41, 0, 8,
1000 1.1 christos 8, 0, 0, 0, 43, 5, 0, 0, 4, 6,
1001 1.1 christos 7
1002 1.1 christos };
1003 1.1 christos
1004 1.1 christos /* YYPGOTO[NTERM-NUM]. */
1005 1.1 christos static const yytype_int8 yypgoto[] =
1006 1.1 christos {
1007 1.1 christos -11, -11, -10, -3, 20, 21, -6, 17, 24, 25,
1008 1.1 christos 18, 26, 28, -11, -5, -2
1009 1.1 christos };
1010 1.1 christos
1011 1.1 christos /* YYDEFGOTO[NTERM-NUM]. */
1012 1.1 christos static const yytype_int8 yydefgoto[] =
1013 1.1 christos {
1014 1.1 christos 0, 8, 72, 9, 10, 11, 12, 13, 14, 15,
1015 1.1 christos 16, 17, 18, 19, 20, 21
1016 1.1 christos };
1017 1.1 christos
1018 1.1 christos /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1019 1.1 christos positive, shift that token. If negative, reduce the rule whose
1020 1.1 christos number is the opposite. If YYTABLE_NINF, syntax error. */
1021 1.1 christos static const yytype_int8 yytable[] =
1022 1.1 christos {
1023 1.1 christos 22, 24, 25, 26, 27, 1, 28, 35, 36, 31,
1024 1.1 christos 32, 29, 30, 45, 23, 2, 41, 3, 4, 5,
1025 1.1 christos 6, 7, 37, 38, 42, 50, 51, 52, 46, 57,
1026 1.1 christos 58, 59, 60, 75, 43, 76, 77, 78, 44, 76,
1027 1.1 christos 77, 33, 34, 47, 68, 48, 39, 40, 69, 70,
1028 1.1 christos 71, 53, 54, 49, 55, 56, 61, 62, 79, 80,
1029 1.1 christos 73, 65, 0, 0, 0, 63, 74, 64, 0, 0,
1030 1.1 christos 66, 0, 0, 67
1031 1.1 christos };
1032 1.1 christos
1033 1.1 christos static const yytype_int8 yycheck[] =
1034 1.1 christos {
1035 1.1 christos 2, 4, 5, 6, 7, 3, 15, 7, 8, 16,
1036 1.1 christos 17, 20, 21, 12, 4, 13, 24, 15, 16, 17,
1037 1.1 christos 18, 19, 22, 23, 25, 28, 29, 30, 27, 35,
1038 1.1 christos 36, 37, 38, 14, 26, 16, 17, 14, 11, 16,
1039 1.1 christos 17, 5, 6, 0, 46, 14, 9, 10, 3, 4,
1040 1.1 christos 28, 31, 32, 13, 33, 34, 39, 40, 3, 3,
1041 1.1 christos 70, 43, -1, -1, -1, 41, 71, 42, -1, -1,
1042 1.1 christos 44, -1, -1, 45
1043 1.1 christos };
1044 1.1 christos
1045 1.1 christos /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
1046 1.1 christos state STATE-NUM. */
1047 1.1 christos static const yytype_int8 yystos[] =
1048 1.1 christos {
1049 1.1 christos 0, 3, 13, 15, 16, 17, 18, 19, 30, 32,
1050 1.1 christos 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
1051 1.1 christos 43, 44, 44, 4, 32, 32, 32, 32, 15, 20,
1052 1.1 christos 21, 16, 17, 5, 6, 7, 8, 22, 23, 9,
1053 1.1 christos 10, 24, 25, 26, 11, 12, 27, 0, 14, 13,
1054 1.1 christos 32, 32, 32, 33, 33, 34, 34, 35, 35, 35,
1055 1.1 christos 35, 36, 36, 37, 38, 39, 40, 41, 44, 3,
1056 1.1 christos 4, 28, 31, 31, 43, 14, 16, 17, 14, 3,
1057 1.1 christos 3
1058 1.1 christos };
1059 1.1 christos
1060 1.1 christos /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
1061 1.1 christos static const yytype_int8 yyr1[] =
1062 1.1 christos {
1063 1.1 christos 0, 29, 30, 30, 30, 30, 31, 31, 31, 32,
1064 1.1 christos 32, 32, 32, 32, 33, 33, 33, 33, 34, 34,
1065 1.1 christos 34, 35, 35, 35, 36, 36, 36, 36, 36, 37,
1066 1.1 christos 37, 37, 38, 38, 39, 39, 40, 40, 41, 41,
1067 1.1 christos 42, 42, 43, 43, 44
1068 1.1 christos };
1069 1.1 christos
1070 1.1 christos /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
1071 1.1 christos static const yytype_int8 yyr2[] =
1072 1.1 christos {
1073 1.1 christos 0, 2, 1, 3, 6, 6, 3, 3, 0, 1,
1074 1.1 christos 2, 2, 2, 2, 1, 3, 3, 3, 1, 3,
1075 1.1 christos 3, 1, 3, 3, 1, 3, 3, 3, 3, 1,
1076 1.1 christos 3, 3, 1, 3, 1, 3, 1, 3, 1, 3,
1077 1.1 christos 1, 3, 1, 5, 1
1078 1.1 christos };
1079 1.1 christos
1080 1.1 christos
1081 1.1 christos enum { YYENOMEM = -2 };
1082 1.1 christos
1083 1.1 christos #define yyerrok (yyerrstatus = 0)
1084 1.1 christos #define yyclearin (yychar = YYEMPTY)
1085 1.1 christos
1086 1.1 christos #define YYACCEPT goto yyacceptlab
1087 1.1 christos #define YYABORT goto yyabortlab
1088 1.1 christos #define YYERROR goto yyerrorlab
1089 1.1 christos #define YYNOMEM goto yyexhaustedlab
1090 1.1 christos
1091 1.1 christos
1092 1.1 christos #define YYRECOVERING() (!!yyerrstatus)
1093 1.1 christos
1094 1.1 christos #define YYBACKUP(Token, Value) \
1095 1.1 christos do \
1096 1.1 christos if (yychar == YYEMPTY) \
1097 1.1 christos { \
1098 1.1 christos yychar = (Token); \
1099 1.1 christos yylval = (Value); \
1100 1.1 christos YYPOPSTACK (yylen); \
1101 1.1 christos yystate = *yyssp; \
1102 1.1 christos goto yybackup; \
1103 1.1 christos } \
1104 1.1 christos else \
1105 1.1 christos { \
1106 1.1 christos yyerror (YY_("syntax error: cannot back up")); \
1107 1.1 christos YYERROR; \
1108 1.1 christos } \
1109 1.1 christos while (0)
1110 1.1 christos
1111 1.1 christos /* Backward compatibility with an undocumented macro.
1112 1.1 christos Use YYerror or YYUNDEF. */
1113 1.1 christos #define YYERRCODE YYUNDEF
1114 1.1 christos
1115 1.1 christos
1116 1.1 christos /* Enable debugging if requested. */
1117 1.1 christos #if YYDEBUG
1118 1.1 christos
1119 1.1 christos # ifndef YYFPRINTF
1120 1.1 christos # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
1121 1.1 christos # define YYFPRINTF fprintf
1122 1.1 christos # endif
1123 1.1 christos
1124 1.1 christos # define YYDPRINTF(Args) \
1125 1.1 christos do { \
1126 1.1 christos if (yydebug) \
1127 1.1 christos YYFPRINTF Args; \
1128 1.1 christos } while (0)
1129 1.1 christos
1130 1.1 christos
1131 1.1 christos
1132 1.1 christos
1133 1.1 christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
1134 1.1 christos do { \
1135 1.1 christos if (yydebug) \
1136 1.1 christos { \
1137 1.1 christos YYFPRINTF (stderr, "%s ", Title); \
1138 1.1 christos yy_symbol_print (stderr, \
1139 1.1 christos Kind, Value); \
1140 1.1 christos YYFPRINTF (stderr, "\n"); \
1141 1.1 christos } \
1142 1.1 christos } while (0)
1143 1.1 christos
1144 1.1 christos
1145 1.1 christos /*-----------------------------------.
1146 1.1 christos | Print this symbol's value on YYO. |
1147 1.1 christos `-----------------------------------*/
1148 1.1 christos
1149 1.1 christos static void
1150 1.1 christos yy_symbol_value_print (FILE *yyo,
1151 1.1 christos yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
1152 1.1 christos {
1153 1.1 christos FILE *yyoutput = yyo;
1154 1.1 christos YY_USE (yyoutput);
1155 1.1 christos if (!yyvaluep)
1156 1.1 christos return;
1157 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1158 1.1 christos YY_USE (yykind);
1159 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
1160 1.1 christos }
1161 1.1 christos
1162 1.1 christos
1163 1.1 christos /*---------------------------.
1164 1.1 christos | Print this symbol on YYO. |
1165 1.1 christos `---------------------------*/
1166 1.1 christos
1167 1.1 christos static void
1168 1.1 christos yy_symbol_print (FILE *yyo,
1169 1.1 christos yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
1170 1.1 christos {
1171 1.1 christos YYFPRINTF (yyo, "%s %s (",
1172 1.1 christos yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
1173 1.1 christos
1174 1.1 christos yy_symbol_value_print (yyo, yykind, yyvaluep);
1175 1.1 christos YYFPRINTF (yyo, ")");
1176 1.1 christos }
1177 1.1 christos
1178 1.1 christos /*------------------------------------------------------------------.
1179 1.1 christos | yy_stack_print -- Print the state stack from its BOTTOM up to its |
1180 1.1 christos | TOP (included). |
1181 1.1 christos `------------------------------------------------------------------*/
1182 1.1 christos
1183 1.1 christos static void
1184 1.1 christos yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop)
1185 1.1 christos {
1186 1.1 christos YYFPRINTF (stderr, "Stack now");
1187 1.1 christos for (; yybottom <= yytop; yybottom++)
1188 1.1 christos {
1189 1.1 christos int yybot = *yybottom;
1190 1.1 christos YYFPRINTF (stderr, " %d", yybot);
1191 1.1 christos }
1192 1.1 christos YYFPRINTF (stderr, "\n");
1193 1.1 christos }
1194 1.1 christos
1195 1.1 christos # define YY_STACK_PRINT(Bottom, Top) \
1196 1.1 christos do { \
1197 1.1 christos if (yydebug) \
1198 1.1 christos yy_stack_print ((Bottom), (Top)); \
1199 1.1 christos } while (0)
1200 1.1 christos
1201 1.1 christos
1202 1.1 christos /*------------------------------------------------.
1203 1.1 christos | Report that the YYRULE is going to be reduced. |
1204 1.1 christos `------------------------------------------------*/
1205 1.1 christos
1206 1.1 christos static void
1207 1.1 christos yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp,
1208 1.1 christos int yyrule)
1209 1.1 christos {
1210 1.1 christos int yylno = yyrline[yyrule];
1211 1.1 christos int yynrhs = yyr2[yyrule];
1212 1.1 christos int yyi;
1213 1.1 christos YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
1214 1.1 christos yyrule - 1, yylno);
1215 1.1 christos /* The symbols being reduced. */
1216 1.1 christos for (yyi = 0; yyi < yynrhs; yyi++)
1217 1.1 christos {
1218 1.1 christos YYFPRINTF (stderr, " $%d = ", yyi + 1);
1219 1.1 christos yy_symbol_print (stderr,
1220 1.1 christos YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
1221 1.1 christos &yyvsp[(yyi + 1) - (yynrhs)]);
1222 1.1 christos YYFPRINTF (stderr, "\n");
1223 1.1 christos }
1224 1.1 christos }
1225 1.1 christos
1226 1.1 christos # define YY_REDUCE_PRINT(Rule) \
1227 1.1 christos do { \
1228 1.1 christos if (yydebug) \
1229 1.1 christos yy_reduce_print (yyssp, yyvsp, Rule); \
1230 1.1 christos } while (0)
1231 1.1 christos
1232 1.1 christos /* Nonzero means print parse trace. It is left uninitialized so that
1233 1.1 christos multiple parsers can coexist. */
1234 1.1 christos int yydebug;
1235 1.1 christos #else /* !YYDEBUG */
1236 1.1 christos # define YYDPRINTF(Args) ((void) 0)
1237 1.1 christos # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
1238 1.1 christos # define YY_STACK_PRINT(Bottom, Top)
1239 1.1 christos # define YY_REDUCE_PRINT(Rule)
1240 1.1 christos #endif /* !YYDEBUG */
1241 1.1 christos
1242 1.1 christos
1243 1.1 christos /* YYINITDEPTH -- initial size of the parser's stacks. */
1244 1.1 christos #ifndef YYINITDEPTH
1245 1.1 christos # define YYINITDEPTH 200
1246 1.1 christos #endif
1247 1.1 christos
1248 1.1 christos /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
1249 1.1 christos if the built-in stack extension method is used).
1250 1.1 christos
1251 1.1 christos Do not make this value too large; the results are undefined if
1252 1.1 christos YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
1253 1.1 christos evaluated with infinite-precision integer arithmetic. */
1254 1.1 christos
1255 1.1 christos #ifndef YYMAXDEPTH
1256 1.1 christos # define YYMAXDEPTH 10000
1257 1.1 christos #endif
1258 1.1 christos
1259 1.1 christos
1260 1.1 christos
1261 1.1 christos
1262 1.1 christos
1263 1.1 christos
1264 1.1 christos /*-----------------------------------------------.
1265 1.1 christos | Release the memory associated to this symbol. |
1266 1.1 christos `-----------------------------------------------*/
1267 1.1 christos
1268 1.1 christos static void
1269 1.1 christos yydestruct (const char *yymsg,
1270 1.1 christos yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
1271 1.1 christos {
1272 1.1 christos YY_USE (yyvaluep);
1273 1.1 christos if (!yymsg)
1274 1.1 christos yymsg = "Deleting";
1275 1.1 christos YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
1276 1.1 christos
1277 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1278 1.1 christos YY_USE (yykind);
1279 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
1280 1.1 christos }
1281 1.1 christos
1282 1.1 christos
1283 1.1 christos /* Lookahead token kind. */
1284 1.1 christos int yychar;
1285 1.1 christos
1286 1.1 christos /* The semantic value of the lookahead symbol. */
1287 1.1 christos YYSTYPE yylval;
1288 1.1 christos /* Number of syntax errors so far. */
1289 1.1 christos int yynerrs;
1290 1.1 christos
1291 1.1 christos
1292 1.1 christos
1293 1.1 christos
1294 1.1 christos /*----------.
1295 1.1 christos | yyparse. |
1296 1.1 christos `----------*/
1297 1.1 christos
1298 1.1 christos int
1299 1.1 christos yyparse (void)
1300 1.1 christos {
1301 1.1 christos yy_state_fast_t yystate = 0;
1302 1.1 christos /* Number of tokens to shift before error messages enabled. */
1303 1.1 christos int yyerrstatus = 0;
1304 1.1 christos
1305 1.1 christos /* Refer to the stacks through separate pointers, to allow yyoverflow
1306 1.1 christos to reallocate them elsewhere. */
1307 1.1 christos
1308 1.1 christos /* Their size. */
1309 1.1 christos YYPTRDIFF_T yystacksize = YYINITDEPTH;
1310 1.1 christos
1311 1.1 christos /* The state stack: array, bottom, top. */
1312 1.1 christos yy_state_t yyssa[YYINITDEPTH];
1313 1.1 christos yy_state_t *yyss = yyssa;
1314 1.1 christos yy_state_t *yyssp = yyss;
1315 1.1 christos
1316 1.1 christos /* The semantic value stack: array, bottom, top. */
1317 1.1 christos YYSTYPE yyvsa[YYINITDEPTH];
1318 1.1 christos YYSTYPE *yyvs = yyvsa;
1319 1.1 christos YYSTYPE *yyvsp = yyvs;
1320 1.1 christos
1321 1.1 christos int yyn;
1322 1.1 christos /* The return value of yyparse. */
1323 1.1 christos int yyresult;
1324 1.1 christos /* Lookahead symbol kind. */
1325 1.1 christos yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY;
1326 1.1 christos /* The variables used to return semantic value and location from the
1327 1.1 christos action routines. */
1328 1.1 christos YYSTYPE yyval;
1329 1.1 christos
1330 1.1 christos
1331 1.1 christos
1332 1.1 christos #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
1333 1.1 christos
1334 1.1 christos /* The number of symbols on the RHS of the reduced rule.
1335 1.1 christos Keep to zero when no symbol should be popped. */
1336 1.1 christos int yylen = 0;
1337 1.1 christos
1338 1.1 christos YYDPRINTF ((stderr, "Starting parse\n"));
1339 1.1 christos
1340 1.1 christos yychar = YYEMPTY; /* Cause a token to be read. */
1341 1.1 christos
1342 1.1 christos goto yysetstate;
1343 1.1 christos
1344 1.1 christos
1345 1.1 christos /*------------------------------------------------------------.
1346 1.1 christos | yynewstate -- push a new state, which is found in yystate. |
1347 1.1 christos `------------------------------------------------------------*/
1348 1.1 christos yynewstate:
1349 1.1 christos /* In all cases, when you get here, the value and location stacks
1350 1.1 christos have just been pushed. So pushing a state here evens the stacks. */
1351 1.1 christos yyssp++;
1352 1.1 christos
1353 1.1 christos
1354 1.1 christos /*--------------------------------------------------------------------.
1355 1.1 christos | yysetstate -- set current state (the top of the stack) to yystate. |
1356 1.1 christos `--------------------------------------------------------------------*/
1357 1.1 christos yysetstate:
1358 1.1 christos YYDPRINTF ((stderr, "Entering state %d\n", yystate));
1359 1.1 christos YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
1360 1.1 christos YY_IGNORE_USELESS_CAST_BEGIN
1361 1.1 christos *yyssp = YY_CAST (yy_state_t, yystate);
1362 1.1 christos YY_IGNORE_USELESS_CAST_END
1363 1.1 christos YY_STACK_PRINT (yyss, yyssp);
1364 1.1 christos
1365 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
1366 1.1 christos #if !defined yyoverflow && !defined YYSTACK_RELOCATE
1367 1.1 christos YYNOMEM;
1368 1.1 christos #else
1369 1.1 christos {
1370 1.1 christos /* Get the current used size of the three stacks, in elements. */
1371 1.1 christos YYPTRDIFF_T yysize = yyssp - yyss + 1;
1372 1.1 christos
1373 1.1 christos # if defined yyoverflow
1374 1.1 christos {
1375 1.1 christos /* Give user a chance to reallocate the stack. Use copies of
1376 1.1 christos these so that the &'s don't force the real ones into
1377 1.1 christos memory. */
1378 1.1 christos yy_state_t *yyss1 = yyss;
1379 1.1 christos YYSTYPE *yyvs1 = yyvs;
1380 1.1 christos
1381 1.1 christos /* Each stack pointer address is followed by the size of the
1382 1.1 christos data in use in that stack, in bytes. This used to be a
1383 1.1 christos conditional around just the two extra args, but that might
1384 1.1 christos be undefined if yyoverflow is a macro. */
1385 1.1 christos yyoverflow (YY_("memory exhausted"),
1386 1.1 christos &yyss1, yysize * YYSIZEOF (*yyssp),
1387 1.1 christos &yyvs1, yysize * YYSIZEOF (*yyvsp),
1388 1.1 christos &yystacksize);
1389 1.1 christos yyss = yyss1;
1390 1.1 christos yyvs = yyvs1;
1391 1.1 christos }
1392 1.1 christos # else /* defined YYSTACK_RELOCATE */
1393 1.1 christos /* Extend the stack our own way. */
1394 1.1 christos if (YYMAXDEPTH <= yystacksize)
1395 1.1 christos YYNOMEM;
1396 1.1 christos yystacksize *= 2;
1397 1.1 christos if (YYMAXDEPTH < yystacksize)
1398 1.1 christos yystacksize = YYMAXDEPTH;
1399 1.1 christos
1400 1.1 christos {
1401 1.1 christos yy_state_t *yyss1 = yyss;
1402 1.1 christos union yyalloc *yyptr =
1403 1.1 christos YY_CAST (union yyalloc *,
1404 1.1 christos YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
1405 1.1 christos if (! yyptr)
1406 1.1 christos YYNOMEM;
1407 1.1 christos YYSTACK_RELOCATE (yyss_alloc, yyss);
1408 1.1 christos YYSTACK_RELOCATE (yyvs_alloc, yyvs);
1409 1.1 christos # undef YYSTACK_RELOCATE
1410 1.1 christos if (yyss1 != yyssa)
1411 1.1 christos YYSTACK_FREE (yyss1);
1412 1.1 christos }
1413 1.1 christos # endif
1414 1.1 christos
1415 1.1 christos yyssp = yyss + yysize - 1;
1416 1.1 christos yyvsp = yyvs + yysize - 1;
1417 1.1 christos
1418 1.1 christos YY_IGNORE_USELESS_CAST_BEGIN
1419 1.1 christos YYDPRINTF ((stderr, "Stack size increased to %ld\n",
1420 1.1 christos YY_CAST (long, yystacksize)));
1421 1.1 christos YY_IGNORE_USELESS_CAST_END
1422 1.1 christos
1423 1.1 christos if (yyss + yystacksize - 1 <= yyssp)
1424 1.1 christos YYABORT;
1425 1.1 christos }
1426 1.1 christos #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
1427 1.1 christos
1428 1.1 christos
1429 1.1 christos if (yystate == YYFINAL)
1430 1.1 christos YYACCEPT;
1431 1.1 christos
1432 1.1 christos goto yybackup;
1433 1.1 christos
1434 1.1 christos
1435 1.1 christos /*-----------.
1436 1.1 christos | yybackup. |
1437 1.1 christos `-----------*/
1438 1.1 christos yybackup:
1439 1.1 christos /* Do appropriate processing given the current state. Read a
1440 1.1 christos lookahead token if we need one and don't already have one. */
1441 1.1 christos
1442 1.1 christos /* First try to decide what to do without reference to lookahead token. */
1443 1.1 christos yyn = yypact[yystate];
1444 1.1 christos if (yypact_value_is_default (yyn))
1445 1.1 christos goto yydefault;
1446 1.1 christos
1447 1.1 christos /* Not known => get a lookahead token if don't already have one. */
1448 1.1 christos
1449 1.1 christos /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
1450 1.1 christos if (yychar == YYEMPTY)
1451 1.1 christos {
1452 1.1 christos YYDPRINTF ((stderr, "Reading a token\n"));
1453 1.1 christos yychar = yylex ();
1454 1.1 christos }
1455 1.1 christos
1456 1.1 christos if (yychar <= YYEOF)
1457 1.1 christos {
1458 1.1 christos yychar = YYEOF;
1459 1.1 christos yytoken = YYSYMBOL_YYEOF;
1460 1.1 christos YYDPRINTF ((stderr, "Now at end of input.\n"));
1461 1.1 christos }
1462 1.1 christos else if (yychar == YYerror)
1463 1.1 christos {
1464 1.1 christos /* The scanner already issued an error message, process directly
1465 1.1 christos to error recovery. But do not keep the error token as
1466 1.1 christos lookahead, it is too special and may lead us to an endless
1467 1.1 christos loop in error recovery. */
1468 1.1 christos yychar = YYUNDEF;
1469 1.1 christos yytoken = YYSYMBOL_YYerror;
1470 1.1 christos goto yyerrlab1;
1471 1.1 christos }
1472 1.1 christos else
1473 1.1 christos {
1474 1.1 christos yytoken = YYTRANSLATE (yychar);
1475 1.1 christos YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1476 1.1 christos }
1477 1.1 christos
1478 1.1 christos /* If the proper action on seeing token YYTOKEN is to reduce or to
1479 1.1 christos detect an error, take that action. */
1480 1.1 christos yyn += yytoken;
1481 1.1 christos if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
1482 1.1 christos goto yydefault;
1483 1.1 christos yyn = yytable[yyn];
1484 1.1 christos if (yyn <= 0)
1485 1.1 christos {
1486 1.1 christos if (yytable_value_is_error (yyn))
1487 1.1 christos goto yyerrlab;
1488 1.1 christos yyn = -yyn;
1489 1.1 christos goto yyreduce;
1490 1.1 christos }
1491 1.1 christos
1492 1.1 christos /* Count tokens shifted since error; after three, turn off error
1493 1.1 christos status. */
1494 1.1 christos if (yyerrstatus)
1495 1.1 christos yyerrstatus--;
1496 1.1 christos
1497 1.1 christos /* Shift the lookahead token. */
1498 1.1 christos YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
1499 1.1 christos yystate = yyn;
1500 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1501 1.1 christos *++yyvsp = yylval;
1502 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
1503 1.1 christos
1504 1.1 christos /* Discard the shifted token. */
1505 1.1 christos yychar = YYEMPTY;
1506 1.1 christos goto yynewstate;
1507 1.1 christos
1508 1.1 christos
1509 1.1 christos /*-----------------------------------------------------------.
1510 1.1 christos | yydefault -- do the default action for the current state. |
1511 1.1 christos `-----------------------------------------------------------*/
1512 1.1 christos yydefault:
1513 1.1 christos yyn = yydefact[yystate];
1514 1.1 christos if (yyn == 0)
1515 1.1 christos goto yyerrlab;
1516 1.1 christos goto yyreduce;
1517 1.1 christos
1518 1.1 christos
1519 1.1 christos /*-----------------------------.
1520 1.1 christos | yyreduce -- do a reduction. |
1521 1.1 christos `-----------------------------*/
1522 1.1 christos yyreduce:
1523 1.1 christos /* yyn is the number of a rule to reduce with. */
1524 1.1 christos yylen = yyr2[yyn];
1525 1.1 christos
1526 1.1 christos /* If YYLEN is nonzero, implement the default value of the action:
1527 1.1 christos '$$ = $1'.
1528 1.1 christos
1529 1.1 christos Otherwise, the following line sets YYVAL to garbage.
1530 1.1 christos This behavior is undocumented and Bison
1531 1.1 christos users should not rely upon it. Assigning to YYVAL
1532 1.1 christos unconditionally makes the parser a bit smaller, and it avoids a
1533 1.1 christos GCC warning that YYVAL may be used uninitialized. */
1534 1.1 christos yyval = yyvsp[1-yylen];
1535 1.1 christos
1536 1.1 christos
1537 1.1 christos YY_REDUCE_PRINT (yyn);
1538 1.1 christos switch (yyn)
1539 1.1 christos {
1540 1.1 christos case 2: /* primary_expression: INTEGER */
1541 1.1 christos #line 354 "./config/loongarch-parse.y"
1542 1.1 christos {emit_const ((yyvsp[0].imm));}
1543 1.1 christos #line 1544 "config/loongarch-parse.c"
1544 1.1 christos break;
1545 1.1 christos
1546 1.1 christos case 4: /* primary_expression: '%' IDENTIFIER '(' IDENTIFIER addend ')' */
1547 1.1 christos #line 356 "./config/loongarch-parse.y"
1548 1.1 christos {reloc ((yyvsp[-4].c_str), (yyvsp[-2].c_str), (yyvsp[-1].imm)); free ((yyvsp[-4].c_str)); free ((yyvsp[-2].c_str));}
1549 1.1 christos #line 1550 "config/loongarch-parse.c"
1550 1.1 christos break;
1551 1.1 christos
1552 1.1 christos case 5: /* primary_expression: '%' IDENTIFIER '(' INTEGER addend ')' */
1553 1.1 christos #line 357 "./config/loongarch-parse.y"
1554 1.1 christos {reloc ((yyvsp[-4].c_str), NULL, (yyvsp[-2].imm) + (yyvsp[-1].imm)); free ((yyvsp[-4].c_str));}
1555 1.1 christos #line 1556 "config/loongarch-parse.c"
1556 1.1 christos break;
1557 1.1 christos
1558 1.1 christos case 6: /* addend: addend '-' INTEGER */
1559 1.1 christos #line 361 "./config/loongarch-parse.y"
1560 1.1 christos {(yyval.imm) -= (yyvsp[0].imm);}
1561 1.1 christos #line 1562 "config/loongarch-parse.c"
1562 1.1 christos break;
1563 1.1 christos
1564 1.1 christos case 7: /* addend: addend '+' INTEGER */
1565 1.1 christos #line 362 "./config/loongarch-parse.y"
1566 1.1 christos {(yyval.imm) += (yyvsp[0].imm);}
1567 1.1 christos #line 1568 "config/loongarch-parse.c"
1568 1.1 christos break;
1569 1.1 christos
1570 1.1 christos case 8: /* addend: %empty */
1571 1.1 christos #line 363 "./config/loongarch-parse.y"
1572 1.1 christos {(yyval.imm) = 0;}
1573 1.1 christos #line 1574 "config/loongarch-parse.c"
1574 1.1 christos break;
1575 1.1 christos
1576 1.1 christos case 10: /* unary_expression: '+' unary_expression */
1577 1.1 christos #line 368 "./config/loongarch-parse.y"
1578 1.1 christos {emit_unary ('+');}
1579 1.1 christos #line 1580 "config/loongarch-parse.c"
1580 1.1 christos break;
1581 1.1 christos
1582 1.1 christos case 11: /* unary_expression: '-' unary_expression */
1583 1.1 christos #line 369 "./config/loongarch-parse.y"
1584 1.1 christos {emit_unary ('-');}
1585 1.1 christos #line 1586 "config/loongarch-parse.c"
1586 1.1 christos break;
1587 1.1 christos
1588 1.1 christos case 12: /* unary_expression: '~' unary_expression */
1589 1.1 christos #line 370 "./config/loongarch-parse.y"
1590 1.1 christos {emit_unary ('~');}
1591 1.1 christos #line 1592 "config/loongarch-parse.c"
1592 1.1 christos break;
1593 1.1 christos
1594 1.1 christos case 13: /* unary_expression: '!' unary_expression */
1595 1.1 christos #line 371 "./config/loongarch-parse.y"
1596 1.1 christos {emit_unary ('!');}
1597 1.1 christos #line 1598 "config/loongarch-parse.c"
1598 1.1 christos break;
1599 1.1 christos
1600 1.1 christos case 15: /* multiplicative_expression: multiplicative_expression '*' unary_expression */
1601 1.1 christos #line 376 "./config/loongarch-parse.y"
1602 1.1 christos {emit_bin ('*');}
1603 1.1 christos #line 1604 "config/loongarch-parse.c"
1604 1.1 christos break;
1605 1.1 christos
1606 1.1 christos case 16: /* multiplicative_expression: multiplicative_expression '/' unary_expression */
1607 1.1 christos #line 377 "./config/loongarch-parse.y"
1608 1.1 christos {emit_bin ('/');}
1609 1.1 christos #line 1610 "config/loongarch-parse.c"
1610 1.1 christos break;
1611 1.1 christos
1612 1.1 christos case 17: /* multiplicative_expression: multiplicative_expression '%' unary_expression */
1613 1.1 christos #line 378 "./config/loongarch-parse.y"
1614 1.1 christos {emit_bin ('%');}
1615 1.1 christos #line 1616 "config/loongarch-parse.c"
1616 1.1 christos break;
1617 1.1 christos
1618 1.1 christos case 19: /* additive_expression: additive_expression '+' multiplicative_expression */
1619 1.1 christos #line 383 "./config/loongarch-parse.y"
1620 1.1 christos {emit_bin ('+');}
1621 1.1 christos #line 1622 "config/loongarch-parse.c"
1622 1.1 christos break;
1623 1.1 christos
1624 1.1 christos case 20: /* additive_expression: additive_expression '-' multiplicative_expression */
1625 1.1 christos #line 384 "./config/loongarch-parse.y"
1626 1.1 christos {emit_bin ('-');}
1627 1.1 christos #line 1628 "config/loongarch-parse.c"
1628 1.1 christos break;
1629 1.1 christos
1630 1.1 christos case 22: /* shift_expression: shift_expression LEFT_OP additive_expression */
1631 1.1 christos #line 389 "./config/loongarch-parse.y"
1632 1.1 christos {emit_bin (LEFT_OP);}
1633 1.1 christos #line 1634 "config/loongarch-parse.c"
1634 1.1 christos break;
1635 1.1 christos
1636 1.1 christos case 23: /* shift_expression: shift_expression RIGHT_OP additive_expression */
1637 1.1 christos #line 390 "./config/loongarch-parse.y"
1638 1.1 christos {emit_bin (RIGHT_OP);}
1639 1.1 christos #line 1640 "config/loongarch-parse.c"
1640 1.1 christos break;
1641 1.1 christos
1642 1.1 christos case 25: /* relational_expression: relational_expression '<' shift_expression */
1643 1.1 christos #line 395 "./config/loongarch-parse.y"
1644 1.1 christos {emit_bin ('<');}
1645 1.1 christos #line 1646 "config/loongarch-parse.c"
1646 1.1 christos break;
1647 1.1 christos
1648 1.1 christos case 26: /* relational_expression: relational_expression '>' shift_expression */
1649 1.1 christos #line 396 "./config/loongarch-parse.y"
1650 1.1 christos {emit_bin ('>');}
1651 1.1 christos #line 1652 "config/loongarch-parse.c"
1652 1.1 christos break;
1653 1.1 christos
1654 1.1 christos case 27: /* relational_expression: relational_expression LE_OP shift_expression */
1655 1.1 christos #line 397 "./config/loongarch-parse.y"
1656 1.1 christos {emit_bin (LE_OP);}
1657 1.1 christos #line 1658 "config/loongarch-parse.c"
1658 1.1 christos break;
1659 1.1 christos
1660 1.1 christos case 28: /* relational_expression: relational_expression GE_OP shift_expression */
1661 1.1 christos #line 398 "./config/loongarch-parse.y"
1662 1.1 christos {emit_bin (GE_OP);}
1663 1.1 christos #line 1664 "config/loongarch-parse.c"
1664 1.1 christos break;
1665 1.1 christos
1666 1.1 christos case 30: /* equality_expression: equality_expression EQ_OP relational_expression */
1667 1.1 christos #line 403 "./config/loongarch-parse.y"
1668 1.1 christos {emit_bin (EQ_OP);}
1669 1.1 christos #line 1670 "config/loongarch-parse.c"
1670 1.1 christos break;
1671 1.1 christos
1672 1.1 christos case 31: /* equality_expression: equality_expression NE_OP relational_expression */
1673 1.1 christos #line 404 "./config/loongarch-parse.y"
1674 1.1 christos {emit_bin (NE_OP);}
1675 1.1 christos #line 1676 "config/loongarch-parse.c"
1676 1.1 christos break;
1677 1.1 christos
1678 1.1 christos case 33: /* and_expression: and_expression '&' equality_expression */
1679 1.1 christos #line 409 "./config/loongarch-parse.y"
1680 1.1 christos {emit_bin ('&');}
1681 1.1 christos #line 1682 "config/loongarch-parse.c"
1682 1.1 christos break;
1683 1.1 christos
1684 1.1 christos case 35: /* exclusive_or_expression: exclusive_or_expression '^' and_expression */
1685 1.1 christos #line 414 "./config/loongarch-parse.y"
1686 1.1 christos {emit_bin ('^');}
1687 1.1 christos #line 1688 "config/loongarch-parse.c"
1688 1.1 christos break;
1689 1.1 christos
1690 1.1 christos case 37: /* inclusive_or_expression: inclusive_or_expression '|' exclusive_or_expression */
1691 1.1 christos #line 419 "./config/loongarch-parse.y"
1692 1.1 christos {emit_bin ('|');}
1693 1.1 christos #line 1694 "config/loongarch-parse.c"
1694 1.1 christos break;
1695 1.1 christos
1696 1.1 christos case 39: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */
1697 1.1 christos #line 424 "./config/loongarch-parse.y"
1698 1.1 christos {emit_bin (AND_OP);}
1699 1.1 christos #line 1700 "config/loongarch-parse.c"
1700 1.1 christos break;
1701 1.1 christos
1702 1.1 christos case 41: /* logical_or_expression: logical_or_expression OR_OP logical_and_expression */
1703 1.1 christos #line 429 "./config/loongarch-parse.y"
1704 1.1 christos {emit_bin (OR_OP);}
1705 1.1 christos #line 1706 "config/loongarch-parse.c"
1706 1.1 christos break;
1707 1.1 christos
1708 1.1 christos case 43: /* conditional_expression: logical_or_expression '?' expression ':' conditional_expression */
1709 1.1 christos #line 434 "./config/loongarch-parse.y"
1710 1.1 christos {emit_if_else ();}
1711 1.1 christos #line 1712 "config/loongarch-parse.c"
1712 1.1 christos break;
1713 1.1 christos
1714 1.1 christos
1715 1.1 christos #line 1716 "config/loongarch-parse.c"
1716 1.1 christos
1717 1.1 christos default: break;
1718 1.1 christos }
1719 1.1 christos /* User semantic actions sometimes alter yychar, and that requires
1720 1.1 christos that yytoken be updated with the new translation. We take the
1721 1.1 christos approach of translating immediately before every use of yytoken.
1722 1.1 christos One alternative is translating here after every semantic action,
1723 1.1 christos but that translation would be missed if the semantic action invokes
1724 1.1 christos YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
1725 1.1 christos if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
1726 1.1 christos incorrect destructor might then be invoked immediately. In the
1727 1.1 christos case of YYERROR or YYBACKUP, subsequent parser actions might lead
1728 1.1 christos to an incorrect destructor call or verbose syntax error message
1729 1.1 christos before the lookahead is translated. */
1730 1.1 christos YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
1731 1.1 christos
1732 1.1 christos YYPOPSTACK (yylen);
1733 1.1 christos yylen = 0;
1734 1.1 christos
1735 1.1 christos *++yyvsp = yyval;
1736 1.1 christos
1737 1.1 christos /* Now 'shift' the result of the reduction. Determine what state
1738 1.1 christos that goes to, based on the state we popped back to and the rule
1739 1.1 christos number reduced by. */
1740 1.1 christos {
1741 1.1 christos const int yylhs = yyr1[yyn] - YYNTOKENS;
1742 1.1 christos const int yyi = yypgoto[yylhs] + *yyssp;
1743 1.1 christos yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
1744 1.1 christos ? yytable[yyi]
1745 1.1 christos : yydefgoto[yylhs]);
1746 1.1 christos }
1747 1.1 christos
1748 1.1 christos goto yynewstate;
1749 1.1 christos
1750 1.1 christos
1751 1.1 christos /*--------------------------------------.
1752 1.1 christos | yyerrlab -- here on detecting error. |
1753 1.1 christos `--------------------------------------*/
1754 1.1 christos yyerrlab:
1755 1.1 christos /* Make sure we have latest lookahead translation. See comments at
1756 1.1 christos user semantic actions for why this is necessary. */
1757 1.1 christos yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
1758 1.1 christos /* If not already recovering from an error, report this error. */
1759 1.1 christos if (!yyerrstatus)
1760 1.1 christos {
1761 1.1 christos ++yynerrs;
1762 1.1 christos yyerror (YY_("syntax error"));
1763 1.1 christos }
1764 1.1 christos
1765 1.1 christos if (yyerrstatus == 3)
1766 1.1 christos {
1767 1.1 christos /* If just tried and failed to reuse lookahead token after an
1768 1.1 christos error, discard it. */
1769 1.1 christos
1770 1.1 christos if (yychar <= YYEOF)
1771 1.1 christos {
1772 1.1 christos /* Return failure if at end of input. */
1773 1.1 christos if (yychar == YYEOF)
1774 1.1 christos YYABORT;
1775 1.1 christos }
1776 1.1 christos else
1777 1.1 christos {
1778 1.1 christos yydestruct ("Error: discarding",
1779 1.1 christos yytoken, &yylval);
1780 1.1 christos yychar = YYEMPTY;
1781 1.1 christos }
1782 1.1 christos }
1783 1.1 christos
1784 1.1 christos /* Else will try to reuse lookahead token after shifting the error
1785 1.1 christos token. */
1786 1.1 christos goto yyerrlab1;
1787 1.1 christos
1788 1.1 christos
1789 1.1 christos /*---------------------------------------------------.
1790 1.1 christos | yyerrorlab -- error raised explicitly by YYERROR. |
1791 1.1 christos `---------------------------------------------------*/
1792 1.1 christos yyerrorlab:
1793 1.1 christos /* Pacify compilers when the user code never invokes YYERROR and the
1794 1.1 christos label yyerrorlab therefore never appears in user code. */
1795 1.1 christos if (0)
1796 1.1 christos YYERROR;
1797 1.1 christos ++yynerrs;
1798 1.1 christos
1799 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
1800 1.1 christos this YYERROR. */
1801 1.1 christos YYPOPSTACK (yylen);
1802 1.1 christos yylen = 0;
1803 1.1 christos YY_STACK_PRINT (yyss, yyssp);
1804 1.1 christos yystate = *yyssp;
1805 1.1 christos goto yyerrlab1;
1806 1.1 christos
1807 1.1 christos
1808 1.1 christos /*-------------------------------------------------------------.
1809 1.1 christos | yyerrlab1 -- common code for both syntax error and YYERROR. |
1810 1.1 christos `-------------------------------------------------------------*/
1811 1.1 christos yyerrlab1:
1812 1.1 christos yyerrstatus = 3; /* Each real token shifted decrements this. */
1813 1.1 christos
1814 1.1 christos /* Pop stack until we find a state that shifts the error token. */
1815 1.1 christos for (;;)
1816 1.1 christos {
1817 1.1 christos yyn = yypact[yystate];
1818 1.1 christos if (!yypact_value_is_default (yyn))
1819 1.1 christos {
1820 1.1 christos yyn += YYSYMBOL_YYerror;
1821 1.1 christos if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
1822 1.1 christos {
1823 1.1 christos yyn = yytable[yyn];
1824 1.1 christos if (0 < yyn)
1825 1.1 christos break;
1826 1.1 christos }
1827 1.1 christos }
1828 1.1 christos
1829 1.1 christos /* Pop the current state because it cannot handle the error token. */
1830 1.1 christos if (yyssp == yyss)
1831 1.1 christos YYABORT;
1832 1.1 christos
1833 1.1 christos
1834 1.1 christos yydestruct ("Error: popping",
1835 1.1 christos YY_ACCESSING_SYMBOL (yystate), yyvsp);
1836 1.1 christos YYPOPSTACK (1);
1837 1.1 christos yystate = *yyssp;
1838 1.1 christos YY_STACK_PRINT (yyss, yyssp);
1839 1.1 christos }
1840 1.1 christos
1841 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1842 1.1 christos *++yyvsp = yylval;
1843 1.1 christos YY_IGNORE_MAYBE_UNINITIALIZED_END
1844 1.1 christos
1845 1.1 christos
1846 1.1 christos /* Shift the error token. */
1847 1.1 christos YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
1848 1.1 christos
1849 1.1 christos yystate = yyn;
1850 1.1 christos goto yynewstate;
1851 1.1 christos
1852 1.1 christos
1853 1.1 christos /*-------------------------------------.
1854 1.1 christos | yyacceptlab -- YYACCEPT comes here. |
1855 1.1 christos `-------------------------------------*/
1856 1.1 christos yyacceptlab:
1857 1.1 christos yyresult = 0;
1858 1.1 christos goto yyreturnlab;
1859 1.1 christos
1860 1.1 christos
1861 1.1 christos /*-----------------------------------.
1862 1.1 christos | yyabortlab -- YYABORT comes here. |
1863 1.1 christos `-----------------------------------*/
1864 1.1 christos yyabortlab:
1865 1.1 christos yyresult = 1;
1866 1.1 christos goto yyreturnlab;
1867 1.1 christos
1868 1.1 christos
1869 1.1 christos /*-----------------------------------------------------------.
1870 1.1 christos | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
1871 1.1 christos `-----------------------------------------------------------*/
1872 1.1 christos yyexhaustedlab:
1873 1.1 christos yyerror (YY_("memory exhausted"));
1874 1.1 christos yyresult = 2;
1875 1.1 christos goto yyreturnlab;
1876 1.1 christos
1877 1.1 christos
1878 1.1 christos /*----------------------------------------------------------.
1879 1.1 christos | yyreturnlab -- parsing is finished, clean up and return. |
1880 1.1 christos `----------------------------------------------------------*/
1881 1.1 christos yyreturnlab:
1882 1.1 christos if (yychar != YYEMPTY)
1883 1.1 christos {
1884 1.1 christos /* Make sure we have latest lookahead translation. See comments at
1885 1.1 christos user semantic actions for why this is necessary. */
1886 1.1 christos yytoken = YYTRANSLATE (yychar);
1887 1.1 christos yydestruct ("Cleanup: discarding lookahead",
1888 1.1 christos yytoken, &yylval);
1889 1.1 christos }
1890 1.1 christos /* Do not reclaim the symbols of the rule whose action triggered
1891 1.1 christos this YYABORT or YYACCEPT. */
1892 1.1 christos YYPOPSTACK (yylen);
1893 1.1 christos YY_STACK_PRINT (yyss, yyssp);
1894 1.1 christos while (yyssp != yyss)
1895 1.1 christos {
1896 1.1 christos yydestruct ("Cleanup: popping",
1897 1.1 christos YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
1898 1.1 christos YYPOPSTACK (1);
1899 1.1 christos }
1900 1.1 christos #ifndef yyoverflow
1901 1.1 christos if (yyss != yyssa)
1902 1.1 christos YYSTACK_FREE (yyss);
1903 1.1 christos #endif
1904 1.1 christos
1905 1.1 christos return yyresult;
1906 1.1 christos }
1907 1.1 christos
1908 1.1 christos #line 440 "./config/loongarch-parse.y"
1909 1.1 christos
1910 1.1 christos
1911