]> git.saurik.com Git - bison.git/blame - data/glr.c
* cfg.mk (gnulib_dir): Assume gnulib is a subdirectory.
[bison.git] / data / glr.c
CommitLineData
08af01c2 1 -*- C -*-
01241d47 2
fb8135fa 3# GLR skeleton for Bison
e141f4d4 4# Copyright (C) 2002-2010 Free Software Foundation, Inc.
fb8135fa 5
f16b0819 6# This program is free software: you can redistribute it and/or modify
fb8135fa 7# it under the terms of the GNU General Public License as published by
f16b0819 8# the Free Software Foundation, either version 3 of the License, or
fb8135fa 9# (at your option) any later version.
f16b0819 10#
fb8135fa
AD
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY; without even the implied warranty of
13# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14# GNU General Public License for more details.
f16b0819 15#
fb8135fa 16# You should have received a copy of the GNU General Public License
f16b0819 17# along with this program. If not, see <http://www.gnu.org/licenses/>.
fb8135fa 18
66d30cd4 19
0a96ba81 20m4_include(b4_pkgdatadir/[c.m4])
7eb8a0bc 21
66d30cd4
AD
22## ---------------- ##
23## Default values. ##
24## ---------------- ##
25
26# Stack parameters.
27m4_define_default([b4_stack_depth_max], [10000])
28m4_define_default([b4_stack_depth_init], [200])
29
2a8d363a
AD
30
31
32## ------------------------ ##
33## Pure/impure interfaces. ##
34## ------------------------ ##
35
d9df47b6
JD
36b4_define_flag_if([pure])
37# If glr.cc is including this file and thus has already set b4_pure_flag, don't
38# change the value of b4_pure_flag, and don't record a use of api.pure.
39m4_ifndef([b4_pure_flag],
40[b4_percent_define_default([[api.pure]], [[false]])
41 m4_define([b4_pure_flag],
42 [b4_percent_define_flag_if([[api.pure]], [[1]], [[0]])])])
2a8d363a 43
4b367315
AD
44# b4_user_formals
45# ---------------
1989d947
AD
46# The possible parse-params formal arguments preceded by a comma.
47#
48# This is not shared with yacc.c in c.m4 because GLR relies on ISO C
49# formal argument declarations.
4b367315
AD
50m4_define([b4_user_formals],
51[m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
52
53
2a8d363a
AD
54# b4_lex_param
55# ------------
21964f43
AD
56# Accumule in b4_lex_param all the yylex arguments.
57# Yes, this is quite ugly...
58m4_define([b4_lex_param],
d6cff4dc 59m4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl
327afc7c 60b4_locations_if([, [[YYLTYPE *], [&yylloc]]])])dnl
21964f43
AD
61m4_ifdef([b4_lex_param], [, ]b4_lex_param)))
62
2a8d363a 63
93724f13
AD
64# b4_yyerror_args
65# ---------------
1989d947
AD
66# Optional effective arguments passed to yyerror: user args plus yylloc, and
67# a trailing comma.
93724f13 68m4_define([b4_yyerror_args],
327afc7c 69[b4_pure_if([b4_locations_if([yylocp, ])])dnl
93724f13
AD
70m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
71
72
73# b4_lyyerror_args
74# ----------------
742e4900 75# Same as above, but on the lookahead, hence &yylloc instead of yylocp.
93724f13 76m4_define([b4_lyyerror_args],
327afc7c 77[b4_pure_if([b4_locations_if([&yylloc, ])])dnl
93724f13
AD
78m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
79
80
2a8d363a
AD
81# b4_pure_args
82# ------------
1989d947 83# Same as b4_yyerror_args, but with a leading comma.
2a8d363a 84m4_define([b4_pure_args],
327afc7c 85[b4_pure_if([b4_locations_if([, yylocp])])[]b4_user_args])
2a8d363a
AD
86
87
2a8d363a
AD
88# b4_lpure_args
89# -------------
742e4900 90# Same as above, but on the lookahead, hence &yylloc instead of yylocp.
2a8d363a 91m4_define([b4_lpure_args],
327afc7c 92[b4_pure_if([b4_locations_if([, &yylloc])])[]b4_user_args])
0245f82d 93
66d30cd4 94
1989d947
AD
95# b4_pure_formals
96# ---------------
d6cff4dc 97# Arguments passed to yyerror: user formals plus yylocp.
1989d947 98m4_define([b4_pure_formals],
327afc7c 99[b4_pure_if([b4_locations_if([, YYLTYPE *yylocp])])[]b4_user_formals])
1989d947
AD
100
101
66d30cd4
AD
102## ----------------- ##
103## Semantic Values. ##
104## ----------------- ##
105
106
01241d47
PH
107# b4_lhs_value([TYPE])
108# --------------------
109# Expansion of $<TYPE>$.
110m4_define([b4_lhs_value],
1fa5d8bb
AD
111[b4_symbol_value([(*yyvalp)], [$1])])
112
113
114# b4_rhs_data(RULE-LENGTH, NUM)
115# -----------------------------
116# Expand to the semantic stack place that contains value and location
117# of symbol number NUM in a rule of length RULE-LENGTH.
118m4_define([b4_rhs_data],
bd187d7b 119[((yyGLRStackItem const *)yyvsp)@{YYFILL (b4_subtract([$2], [$1]))@}.yystate])
01241d47
PH
120
121
122# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
123# --------------------------------------
124# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
125# symbols on RHS.
126m4_define([b4_rhs_value],
1fa5d8bb 127[b4_symbol_value([b4_rhs_data([$1], [$2]).yysemantics.yysval], [$3])])
01241d47
PH
128
129
130
131## ----------- ##
132## Locations. ##
133## ----------- ##
134
01241d47
PH
135# b4_lhs_location()
136# -----------------
137# Expansion of @$.
138m4_define([b4_lhs_location],
139[(*yylocp)])
140
141
142# b4_rhs_location(RULE-LENGTH, NUM)
143# ---------------------------------
144# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
145# on RHS.
146m4_define([b4_rhs_location],
1fa5d8bb 147[(b4_rhs_data([$1], [$2]).yyloc)])
01241d47 148
5059b5c8
AD
149
150
151## -------------- ##
152## Output files. ##
153## -------------- ##
154
b526ee61
AD
155# We do want M4 expansion after # for CPP macros.
156m4_changecom()
08af01c2 157m4_divert_push(0)dnl
a0d4650a 158@output(b4_parser_file_name@)@
193d7c70 159b4_copyright([Skeleton implementation for Bison GLR parsers in C],
e141f4d4 160 [2002-2010])
fb8135fa 161[
193d7c70 162/* C GLR parser skeleton written by Paul Hilfinger. */
01241d47 163
2a8d363a 164]b4_identification
5059b5c8 165
a4e25e1d 166b4_percent_code_get([[top]])[]dnl
aa08666d 167m4_if(b4_prefix, [yy], [],
c5b95ccf 168[/* Substitute the variable and function names. */
01241d47
PH
169#define yyparse b4_prefix[]parse
170#define yylex b4_prefix[]lex
171#define yyerror b4_prefix[]error
172#define yylval b4_prefix[]lval
173#define yychar b4_prefix[]char
174#define yydebug b4_prefix[]debug
175#define yynerrs b4_prefix[]nerrs
9bc0dd67
JD
176#define yylloc b4_prefix[]lloc])[
177
178/* Copy the first part of user declarations. */
136a0f76 179]b4_user_pre_prologue
01241d47 180
5059b5c8
AD
181dnl # b4_shared_declarations
182dnl # ----------------------
183dnl # Declaration that might either go into the header (if --defines)
184dnl # or open coded in the parser body.
185m4_define([b4_shared_declarations],
a4e25e1d 186[b4_percent_code_get([[requires]])[]dnl
01241d47 187
9bc0dd67 188b4_token_enums(b4_tokens)
141f5793 189
ddc8ede1 190[#ifndef YYSTYPE
01241d47 191]m4_ifdef([b4_stype],
ddc8ede1 192[[typedef union ]b4_union_name[
7ecec4dd 193{
ddc8ede1 194]b4_user_stype[
7ecec4dd 195} YYSTYPE;
ddc8ede1
PE
196# define YYSTYPE_IS_TRIVIAL 1]],
197[m4_if(b4_tag_seen_flag, 0,
198[[typedef int YYSTYPE;
199# define YYSTYPE_IS_TRIVIAL 1]])])[
01241d47
PH
200#endif
201
02650b7f 202#if ! defined YYLTYPE && ! defined YYLTYPE_IS_DECLARED
fa8c3ebc 203typedef struct YYLTYPE
01241d47 204{
327afc7c 205]b4_locations_if([
f50adbbd
AD
206 int first_line;
207 int first_column;
208 int last_line;
ffa4c58a 209 int last_column;
5cc16ecc
PE
210],[
211 char yydummy;
25005f6a 212])[
fa8c3ebc
PE
213} YYLTYPE;
214# define YYLTYPE_IS_DECLARED 1
01241d47
PH
215# define YYLTYPE_IS_TRIVIAL 1
216#endif
9bc0dd67 217
a4e25e1d 218]b4_percent_code_get([[provides]])[]dnl
9bc0dd67 219])
5059b5c8 220
bd9d212b 221b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
5ad0a449 222 [b4_shared_declarations])[
5059b5c8
AD
223
224/* Enabling traces. */
225#ifndef YYDEBUG
fa819509 226# define YYDEBUG ]b4_parse_trace_if([1], [0])[
5059b5c8
AD
227#endif
228
229/* Enabling verbose error messages. */
230#ifdef YYERROR_VERBOSE
231# undef YYERROR_VERBOSE
232# define YYERROR_VERBOSE 1
233#else
b3a2272a 234# define YYERROR_VERBOSE ]b4_error_verbose_if([1], [0])[
5059b5c8
AD
235#endif
236
237/* Enabling the token table. */
238#ifndef YYTOKEN_TABLE
239# define YYTOKEN_TABLE ]b4_token_table[
240#endif
01241d47 241
288006a2 242/* Default (constant) value used for initialization for null
f6abc26e 243 right-hand sides. Unlike the standard yacc.c template,
288006a2 244 here we set the default value of $$ to a zeroed-out value.
b9b51bf0 245 Since the default value is undefined, this behavior is
9d9b8b70 246 technically correct. */
01241d47 247static YYSTYPE yyval_default;
01241d47
PH
248
249/* Copy the second part of user declarations. */
8e0a5e9e 250]b4_user_post_prologue
a4e25e1d 251b4_percent_code_get[]dnl
01241d47 252
8e0a5e9e 253[#include <stdio.h>
63cb01d6
PE
254#include <stdlib.h>
255#include <string.h>
63cb01d6 256
30757c8c 257#ifndef YY_
ae93128c 258# if defined YYENABLE_NLS && YYENABLE_NLS
30757c8c
PE
259# if ENABLE_NLS
260# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
261# define YY_(msgid) dgettext ("bison-runtime", msgid)
262# endif
263# endif
264# ifndef YY_
265# define YY_(msgid) msgid
266# endif
267#endif
268
2a4647a3 269/* Suppress unused-variable warnings by "using" E. */
02650b7f 270#if ! defined lint || defined __GNUC__
12ce2df6 271# define YYUSE(e) ((void) (e))
613d8952 272#else
12ce2df6
PE
273# define YYUSE(e) /* empty */
274#endif
275
276/* Identity function, used to suppress warnings about constant conditions. */
277#ifndef lint
278# define YYID(n) (n)
279#else
280]b4_c_function_def([YYID], [static int], [[int i], [i]])[
281{
282 return i;
283}
613d8952 284#endif
2a4647a3 285
a525b568
PE
286#ifndef YYFREE
287# define YYFREE free
288#endif
289#ifndef YYMALLOC
290# define YYMALLOC malloc
291#endif
292#ifndef YYREALLOC
293# define YYREALLOC realloc
294#endif
295
63cb01d6
PE
296#define YYSIZEMAX ((size_t) -1)
297
f7c398aa
PE
298#ifdef __cplusplus
299 typedef bool yybool;
300#else
301 typedef unsigned char yybool;
01241d47 302#endif
f7c398aa
PE
303#define yytrue 1
304#define yyfalse 0
01241d47 305
c89b4c03
PE
306#ifndef YYSETJMP
307# include <setjmp.h>
308# define YYJMP_BUF jmp_buf
309# define YYSETJMP(env) setjmp (env)
310# define YYLONGJMP(env, val) longjmp (env, val)
311#endif
312
1154cced
AD
313/*-----------------.
314| GCC extensions. |
315`-----------------*/
316
317#ifndef __attribute__
318/* This feature is available in gcc versions 2.5 and later. */
02650b7f 319# if (! defined __GNUC__ || __GNUC__ < 2 \
a603c6e0
JD
320 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) \
321 || (defined __STRICT_ANSI__ && __STRICT_ANSI__))
1154cced
AD
322# define __attribute__(Spec) /* empty */
323# endif
324#endif
325
327afc7c 326]b4_locations_if([#define YYOPTIONAL_LOC(Name) Name],[
3bc00d6c
PE
327#ifdef __cplusplus
328# define YYOPTIONAL_LOC(Name) /* empty */
329#else
330# define YYOPTIONAL_LOC(Name) Name __attribute__ ((__unused__))
331#endif])[
332
64c4fd52
PE
333#ifndef YYASSERT
334# define YYASSERT(condition) ((void) ((condition) || (abort (), 0)))
335#endif
336
9d9b8b70 337/* YYFINAL -- State number of the termination state. */
7db2ed2d 338#define YYFINAL ]b4_final_state_number[
39912f52 339/* YYLAST -- Last index in YYTABLE. */
01241d47
PH
340#define YYLAST ]b4_last[
341
9d9b8b70 342/* YYNTOKENS -- Number of terminals. */
7db2ed2d 343#define YYNTOKENS ]b4_tokens_number[
9d9b8b70 344/* YYNNTS -- Number of nonterminals. */
7db2ed2d 345#define YYNNTS ]b4_nterms_number[
9d9b8b70 346/* YYNRULES -- Number of rules. */
7db2ed2d 347#define YYNRULES ]b4_rules_number[
9d9b8b70 348/* YYNRULES -- Number of states. */
7db2ed2d 349#define YYNSTATES ]b4_states_number[
9d9b8b70 350/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule. */
01241d47 351#define YYMAXRHS ]b4_r2_max[
25005f6a 352/* YYMAXLEFT -- Maximum number of symbols to the left of a handle
9d9b8b70 353 accessed by $0, $-1, etc., in any rule. */
25005f6a 354#define YYMAXLEFT ]b4_max_left_semantic_context[
01241d47
PH
355
356/* YYTRANSLATE(X) -- Bison symbol number corresponding to X. */
357#define YYUNDEFTOK ]b4_undef_token_number[
358#define YYMAXUTOK ]b4_user_token_number_max[
359
5cc16ecc 360#define YYTRANSLATE(YYX) \
cf806753 361 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01241d47
PH
362
363/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
a762e609 364static const ]b4_int_type_for([b4_translate])[ yytranslate[] =
01241d47
PH
365{
366 ]b4_translate[
367};
368
369#if YYDEBUG
01241d47 370/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
a762e609 371static const ]b4_int_type_for([b4_rline])[ yyrline[] =
01241d47
PH
372{
373 ]b4_rline[
374};
375#endif
376
141f5793 377#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
9e0876fb 378/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
9d9b8b70 379 First, the terminals, then, starting at YYNTOKENS, nonterminals. */
01241d47
PH
380static const char *const yytname[] =
381{
382 ]b4_tname[
383};
01241d47
PH
384#endif
385
728e89a0
AD
386#define YYPACT_NINF ]b4_pact_ninf[
387#define YYTABLE_NINF ]b4_table_ninf[
01241d47 388
728e89a0 389]b4_parser_tables_define[
01241d47 390
9d9b8b70 391/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none). */
a762e609 392static const ]b4_int_type_for([b4_dprec])[ yydprec[] =
01241d47
PH
393{
394 ]b4_dprec[
395};
396
9d9b8b70 397/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM. */
a762e609 398static const ]b4_int_type_for([b4_merger])[ yymerger[] =
01241d47
PH
399{
400 ]b4_merger[
401};
402
ea99527d
AD
403/* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
404 list of conflicting reductions corresponding to action entry for
405 state STATE-NUM in yytable. 0 means no conflicts. The list in
406 yyconfl is terminated by a rule number of 0. */
a762e609 407static const ]b4_int_type_for([b4_conflict_list_heads])[ yyconflp[] =
01241d47
PH
408{
409 ]b4_conflict_list_heads[
410};
411
ea99527d
AD
412/* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
413 0, pointed into by YYCONFLP. */
a762e609 414]dnl Do not use b4_int_type_for here, since there are places where
779e7ceb 415dnl pointers onto yyconfl are taken, which type is "short int *".
a762e609 416dnl We probably ought to introduce a type for confl.
779e7ceb 417[static const short int yyconfl[] =
01241d47
PH
418{
419 ]b4_conflicting_rules[
420};
01241d47 421\f
0245f82d 422/* Prevent warning if -Wmissing-prototypes. */
2a8d363a 423]b4_c_ansi_function_decl([yyparse], [int], b4_parse_param)[
e7cb57c0 424
2a8d363a 425/* Error token number */
01241d47
PH
426#define YYTERROR 1
427
b4a20338
AD
428/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
429 If N is 0, then set CURRENT to the empty location which ends
430 the previous symbol: RHS[0] (always defined). */
01241d47 431
327afc7c 432]b4_locations_if([[
9fafc4dd 433#define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
01241d47 434#ifndef YYLLOC_DEFAULT
9fafc4dd
PE
435# define YYLLOC_DEFAULT(Current, Rhs, N) \
436 do \
9ecafbbf 437 if (YYID (N)) \
9fafc4dd 438 { \
9bec482e
PE
439 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
440 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
441 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
442 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
9fafc4dd
PE
443 } \
444 else \
445 { \
446 (Current).first_line = (Current).last_line = \
9bec482e 447 YYRHSLOC (Rhs, 0).last_line; \
9fafc4dd 448 (Current).first_column = (Current).last_column = \
9bec482e 449 YYRHSLOC (Rhs, 0).last_column; \
9fafc4dd 450 } \
12ce2df6 451 while (YYID (0))
3fc16193
AD
452
453/* YY_LOCATION_PRINT -- Print the location on the stream.
454 This macro was not mandated originally: define only if we know
455 we won't break user code: when these are the locations we know. */
456
457# define YY_LOCATION_PRINT(File, Loc) \
458 fprintf (File, "%d.%d-%d.%d", \
69ce078b
PE
459 (Loc).first_line, (Loc).first_column, \
460 (Loc).last_line, (Loc).last_column)
25005f6a
PH
461#endif
462]],[
463#ifndef YYLLOC_DEFAULT
9fafc4dd 464# define YYLLOC_DEFAULT(Current, Rhs, N) ((void) 0)
01241d47 465#endif
25005f6a
PH
466])[
467
3fc16193
AD
468#ifndef YY_LOCATION_PRINT
469# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
470#endif
471
01241d47
PH
472
473/* YYLEX -- calling `yylex' with the right arguments. */
21964f43 474#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
01241d47
PH
475
476]b4_pure_if(
477[
01241d47 478#undef yynerrs
3e7a2cd9 479#define yynerrs (yystackp->yyerrcnt)
01241d47 480#undef yychar
d6cff4dc
AD
481#define yychar (yystackp->yyrawchar)
482#undef yylval
483#define yylval (yystackp->yyval)
484#undef yylloc
485#define yylloc (yystackp->yyloc)
486m4_if(b4_prefix[], [yy], [],
487[#define b4_prefix[]nerrs yynerrs
488#define b4_prefix[]char yychar
489#define b4_prefix[]lval yylval
490#define b4_prefix[]lloc yylloc])],
01241d47
PH
491[YYSTYPE yylval;
492
493YYLTYPE yylloc;
494
495int yynerrs;
496int yychar;])[
497
498static const int YYEOF = 0;
499static const int YYEMPTY = -2;
500
501typedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
502
5860cc8c
AD
503#define YYCHK(YYE) \
504 do { \
505 YYRESULTTAG yyflag = YYE; \
506 if (yyflag != yyok) \
507 return yyflag; \
508 } while (YYID (0))
01241d47
PH
509
510#if YYDEBUG
511
02650b7f 512# ifndef YYFPRINTF
01241d47 513# define YYFPRINTF fprintf
02650b7f 514# endif
01241d47
PH
515
516# define YYDPRINTF(Args) \
5860cc8c
AD
517 do { \
518 if (yydebug) \
519 YYFPRINTF Args; \
520 } while (YYID (0))
7bd6c77e 521
a0af42fc 522]b4_yy_symbol_print_generate([b4_c_ansi_function_def])[
7bd6c77e 523
5860cc8c
AD
524# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
525 do { \
526 if (yydebug) \
527 { \
528 YYFPRINTF (stderr, "%s ", Title); \
529 yy_symbol_print (stderr, Type, \
530 Value]b4_locations_if([, Location])[]b4_user_args[); \
531 YYFPRINTF (stderr, "\n"); \
532 } \
533 } while (YYID (0))
9c1e26bd 534
01241d47
PH
535/* Nonzero means print parse trace. It is left uninitialized so that
536 multiple parsers can coexist. */
537int yydebug;
7bd6c77e 538
01241d47 539#else /* !YYDEBUG */
7bd6c77e 540
ee16363f 541# define YYDPRINTF(Args)
284acc8b 542# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
7bd6c77e 543
01241d47
PH
544#endif /* !YYDEBUG */
545
546/* YYINITDEPTH -- initial size of the parser's stacks. */
547#ifndef YYINITDEPTH
66d30cd4 548# define YYINITDEPTH ]b4_stack_depth_init[
01241d47
PH
549#endif
550
551/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
552 if the built-in stack extension method is used).
553
554 Do not make this value too large; the results are undefined if
fb8135fa 555 SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
01241d47
PH
556 evaluated with infinite-precision integer arithmetic. */
557
01241d47 558#ifndef YYMAXDEPTH
66d30cd4 559# define YYMAXDEPTH ]b4_stack_depth_max[
01241d47
PH
560#endif
561
562/* Minimum number of free items on the stack allowed after an
fb8135fa 563 allocation. This is to allow allocation and initialization
63cb01d6 564 to be completed by functions that call yyexpandGLRStack before the
fb8135fa 565 stack is expanded, thus insuring that all necessary pointers get
9d9b8b70 566 properly redirected to new data. */
01241d47
PH
567#define YYHEADROOM 2
568
e2688cd9 569#ifndef YYSTACKEXPANDABLE
02650b7f 570# if (! defined __cplusplus \
327afc7c 571 || (]b4_locations_if([[defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL \
02650b7f 572 && ]])[defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))
e2688cd9
PE
573# define YYSTACKEXPANDABLE 1
574# else
575# define YYSTACKEXPANDABLE 0
576# endif
01241d47
PH
577#endif
578
02998094
AD
579#if YYSTACKEXPANDABLE
580# define YY_RESERVE_GLRSTACK(Yystack) \
581 do { \
582 if (Yystack->yyspaceLeft < YYHEADROOM) \
583 yyexpandGLRStack (Yystack); \
12ce2df6 584 } while (YYID (0))
02998094
AD
585#else
586# define YY_RESERVE_GLRSTACK(Yystack) \
587 do { \
588 if (Yystack->yyspaceLeft < YYHEADROOM) \
589 yyMemoryExhausted (Yystack); \
12ce2df6 590 } while (YYID (0))
02998094
AD
591#endif
592
593
63cb01d6
PE
594#if YYERROR_VERBOSE
595
596# ifndef yystpcpy
02650b7f 597# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
63cb01d6
PE
598# define yystpcpy stpcpy
599# else
600/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
601 YYDEST. */
602static char *
603yystpcpy (char *yydest, const char *yysrc)
604{
605 char *yyd = yydest;
606 const char *yys = yysrc;
607
608 while ((*yyd++ = *yys++) != '\0')
609 continue;
610
611 return yyd - 1;
612}
613# endif
614# endif
615
9e0876fb
PE
616# ifndef yytnamerr
617/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
618 quotes and backslashes, so that it's suitable for yyerror. The
619 heuristic is that double-quoting is unnecessary unless the string
620 contains an apostrophe, a comma, or backslash (other than
621 backslash-backslash). YYSTR is taken from yytname. If YYRES is
622 null, do not copy; instead, return the length of what the result
623 would have been. */
624static size_t
625yytnamerr (char *yyres, const char *yystr)
626{
627 if (*yystr == '"')
628 {
629 size_t yyn = 0;
630 char const *yyp = yystr;
631
632 for (;;)
633 switch (*++yyp)
634 {
635 case '\'':
636 case ',':
637 goto do_not_strip_quotes;
638
639 case '\\':
640 if (*++yyp != '\\')
641 goto do_not_strip_quotes;
642 /* Fall through. */
643 default:
644 if (yyres)
645 yyres[yyn] = *yyp;
646 yyn++;
647 break;
648
649 case '"':
650 if (yyres)
651 yyres[yyn] = '\0';
652 return yyn;
653 }
654 do_not_strip_quotes: ;
655 }
656
657 if (! yyres)
658 return strlen (yystr);
659
660 return yystpcpy (yyres, yystr) - yyres;
661}
662# endif
663
63cb01d6
PE
664#endif /* !YYERROR_VERBOSE */
665
01241d47
PH
666/** State numbers, as in LALR(1) machine */
667typedef int yyStateNum;
668
669/** Rule numbers, as in LALR(1) machine */
670typedef int yyRuleNum;
671
672/** Grammar symbol */
779e7ceb 673typedef short int yySymbol;
01241d47
PH
674
675/** Item references, as in LALR(1) machine */
779e7ceb 676typedef short int yyItemNum;
01241d47
PH
677
678typedef struct yyGLRState yyGLRState;
3e7a2cd9 679typedef struct yyGLRStateSet yyGLRStateSet;
01241d47
PH
680typedef struct yySemanticOption yySemanticOption;
681typedef union yyGLRStackItem yyGLRStackItem;
682typedef struct yyGLRStack yyGLRStack;
01241d47
PH
683
684struct yyGLRState {
9d9b8b70 685 /** Type tag: always true. */
f7c398aa 686 yybool yyisState;
9d9b8b70
PE
687 /** Type tag for yysemantics. If true, yysval applies, otherwise
688 * yyfirstVal applies. */
f7c398aa 689 yybool yyresolved;
9d9b8b70 690 /** Number of corresponding LALR(1) machine state. */
01241d47 691 yyStateNum yylrState;
5e6f62f2 692 /** Preceding state in this stack */
01241d47 693 yyGLRState* yypred;
5e6f62f2 694 /** Source position of the first token produced by my symbol */
01241d47
PH
695 size_t yyposn;
696 union {
5e6f62f2 697 /** First in a chain of alternative reductions producing the
010f91c3 698 * non-terminal corresponding to this state, threaded through
9d9b8b70 699 * yynext. */
01241d47 700 yySemanticOption* yyfirstVal;
9d9b8b70 701 /** Semantic value for this state. */
01241d47
PH
702 YYSTYPE yysval;
703 } yysemantics;
9d9b8b70 704 /** Source location for this state. */
01241d47
PH
705 YYLTYPE yyloc;
706};
707
708struct yyGLRStateSet {
709 yyGLRState** yystates;
b7691f15 710 /** During nondeterministic operation, yylookaheadNeeds tracks which
bf70fa87 711 * stacks have actually needed the current lookahead. During deterministic
b7691f15 712 * operation, yylookaheadNeeds[0] is not maintained since it would merely
bf70fa87 713 * duplicate yychar != YYEMPTY. */
b7691f15 714 yybool* yylookaheadNeeds;
01241d47
PH
715 size_t yysize, yycapacity;
716};
717
718struct yySemanticOption {
9d9b8b70 719 /** Type tag: always false. */
f7c398aa 720 yybool yyisState;
5e6f62f2 721 /** Rule number for this reduction */
01241d47 722 yyRuleNum yyrule;
9d9b8b70 723 /** The last RHS state in the list of states to be reduced. */
01241d47 724 yyGLRState* yystate;
bf70fa87
JD
725 /** The lookahead for this reduction. */
726 int yyrawchar;
727 YYSTYPE yyval;
728 YYLTYPE yyloc;
9d9b8b70
PE
729 /** Next sibling in chain of options. To facilitate merging,
730 * options are chained in decreasing order by address. */
01241d47
PH
731 yySemanticOption* yynext;
732};
733
9d9b8b70
PE
734/** Type of the items in the GLR stack. The yyisState field
735 * indicates which item of the union is valid. */
01241d47
PH
736union yyGLRStackItem {
737 yyGLRState yystate;
738 yySemanticOption yyoption;
739};
740
741struct yyGLRStack {
01241d47 742 int yyerrState;
327afc7c 743]b4_locations_if([[ /* To compute the location of the error token. */
63d72da7 744 yyGLRStackItem yyerror_range[3];]])[
01241d47
PH
745]b4_pure_if(
746[
747 int yyerrcnt;
748 int yyrawchar;
d6cff4dc
AD
749 YYSTYPE yyval;
750 YYLTYPE yyloc;
01241d47 751])[
c89b4c03 752 YYJMP_BUF yyexception_buffer;
01241d47
PH
753 yyGLRStackItem* yyitems;
754 yyGLRStackItem* yynextFree;
63cb01d6 755 size_t yyspaceLeft;
01241d47
PH
756 yyGLRState* yysplitPoint;
757 yyGLRState* yylastDeleted;
758 yyGLRStateSet yytops;
759};
760
b2741627 761#if YYSTACKEXPANDABLE
3e7a2cd9 762static void yyexpandGLRStack (yyGLRStack* yystackp);
b2741627 763#endif
01241d47 764
3e7a2cd9 765static void yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
135bc829 766 __attribute__ ((__noreturn__));
01241d47 767static void
3e7a2cd9 768yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
01241d47 769{
fd2df2ed
PE
770 if (yymsg != NULL)
771 yyerror (]b4_yyerror_args[yymsg);
3e7a2cd9 772 YYLONGJMP (yystackp->yyexception_buffer, 1);
01241d47
PH
773}
774
3e7a2cd9 775static void yyMemoryExhausted (yyGLRStack* yystackp)
135bc829 776 __attribute__ ((__noreturn__));
63cb01d6 777static void
3e7a2cd9 778yyMemoryExhausted (yyGLRStack* yystackp)
63cb01d6 779{
3e7a2cd9 780 YYLONGJMP (yystackp->yyexception_buffer, 2);
63cb01d6
PE
781}
782
01241d47 783#if YYDEBUG || YYERROR_VERBOSE
63cb01d6 784/** A printable representation of TOKEN. */
fb8135fa
AD
785static inline const char*
786yytokenName (yySymbol yytoken)
01241d47 787{
d0d5aa64
PE
788 if (yytoken == YYEMPTY)
789 return "";
790
01241d47
PH
791 return yytname[yytoken];
792}
793#endif
794
f868dc04
PH
795/** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
796 * at YYVSP[YYLOW0].yystate.yypred. Leaves YYVSP[YYLOW1].yystate.yypred
9d9b8b70 797 * containing the pointer to the next state in the chain. */
135bc829 798static void yyfillin (yyGLRStackItem *, int, int) __attribute__ ((__unused__));
6a84279c
PE
799static void
800yyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
f868dc04
PH
801{
802 yyGLRState* s;
803 int i;
c4749565 804 s = yyvsp[yylow0].yystate.yypred;
f868dc04
PH
805 for (i = yylow0-1; i >= yylow1; i -= 1)
806 {
64c4fd52 807 YYASSERT (s->yyresolved);
f868dc04
PH
808 yyvsp[i].yystate.yyresolved = yytrue;
809 yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;
810 yyvsp[i].yystate.yyloc = s->yyloc;
811 s = yyvsp[i].yystate.yypred = s->yypred;
812 }
6a84279c
PE
813}
814
815/* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1. Otherwise, fill in
44e7ead1
PH
816 * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
817 * For convenience, always return YYLOW1. */
6a84279c 818static inline int yyfill (yyGLRStackItem *, int *, int, yybool)
135bc829 819 __attribute__ ((__unused__));
6a84279c
PE
820static inline int
821yyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
822{
823 if (!yynormal && yylow1 < *yylow)
824 {
825 yyfillin (yyvsp, *yylow, yylow1);
826 *yylow = yylow1;
827 }
f868dc04
PH
828 return yylow1;
829}
830
01241d47
PH
831/** Perform user action for rule number YYN, with RHS length YYRHSLEN,
832 * and top stack item YYVSP. YYLVALP points to place to put semantic
833 * value ($$), and yylocp points to place for location information
9d9b8b70
PE
834 * (@@$). Returns yyok for normal return, yyaccept for YYACCEPT,
835 * yyerr for YYERROR, yyabort for YYABORT. */
12ce2df6 836/*ARGSUSED*/ static YYRESULTTAG
fb8135fa 837yyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
80a18357 838 YYSTYPE* yyvalp,
43d3b664 839 YYLTYPE* YYOPTIONAL_LOC (yylocp),
3e7a2cd9 840 yyGLRStack* yystackp
69ce078b 841 ]b4_user_formals[)
01241d47 842{
135bc829 843 yybool yynormal __attribute__ ((__unused__)) =
3e7a2cd9 844 (yystackp->yysplitPoint == NULL);
f868dc04 845 int yylow;
613d8952
AD
846]b4_parse_param_use[]dnl
847[# undef yyerrok
3e7a2cd9 848# define yyerrok (yystackp->yyerrState = 0)
01241d47
PH
849# undef YYACCEPT
850# define YYACCEPT return yyaccept
851# undef YYABORT
852# define YYABORT return yyabort
853# undef YYERROR
5cc16ecc 854# define YYERROR return yyerrok, yyerr
01241d47 855# undef YYRECOVERING
02103984 856# define YYRECOVERING() (yystackp->yyerrState != 0)
01241d47 857# undef yyclearin
3f001415 858# define yyclearin (yychar = YYEMPTY)
f868dc04 859# undef YYFILL
6a84279c 860# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
01241d47
PH
861# undef YYBACKUP
862# define YYBACKUP(Token, Value) \
30757c8c 863 return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")), \
5cc16ecc 864 yyerrok, yyerr
01241d47 865
25005f6a
PH
866 yylow = 1;
867 if (yyrhslen == 0)
b4a20338 868 *yyvalp = yyval_default;
25005f6a 869 else
b4a20338 870 *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;
401aace6 871 YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen);
327afc7c 872]b4_locations_if([[ yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
a85284cf 873]])[
25005f6a
PH
874 switch (yyn)
875 {
8ec0a172 876 ]b4_user_actions[
95f22ad2 877 default: break;
25005f6a 878 }
01241d47 879
25005f6a 880 return yyok;
01241d47
PH
881# undef yyerrok
882# undef YYABORT
883# undef YYACCEPT
884# undef YYERROR
885# undef YYBACKUP
886# undef yyclearin
887# undef YYRECOVERING
01241d47
PH
888}
889\f
890
12ce2df6 891/*ARGSUSED*/ static void
01241d47
PH
892yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
893{
2a4647a3
PE
894 YYUSE (yy0);
895 YYUSE (yy1);
1154cced 896
fb8135fa 897 switch (yyn)
01241d47 898 {
a85284cf 899 ]b4_mergers[
e2688cd9 900 default: break;
01241d47 901 }
01241d47 902}
a85284cf 903
2a8d363a 904 /* Bison grammar-table manipulation. */
01241d47 905
7bd6c77e
AD
906]b4_yydestruct_generate([b4_c_ansi_function_def])[
907
42a6501d
PE
908/** Number of symbols composing the right hand side of rule #RULE. */
909static inline int
910yyrhsLength (yyRuleNum yyrule)
911{
912 return yyr2[yyrule];
913}
914
a4cf101a 915static void
4b367315 916yydestroyGLRState (char const *yymsg, yyGLRState *yys]b4_user_formals[)
a4cf101a
PE
917{
918 if (yys->yyresolved)
919 yydestruct (yymsg, yystos[yys->yylrState],
327afc7c 920 &yys->yysemantics.yysval]b4_locations_if([, &yys->yyloc])[]b4_user_args[);
a4cf101a
PE
921 else
922 {
923#if YYDEBUG
924 if (yydebug)
925 {
520181ab
JD
926 if (yys->yysemantics.yyfirstVal)
927 YYFPRINTF (stderr, "%s unresolved ", yymsg);
928 else
929 YYFPRINTF (stderr, "%s incomplete ", yymsg);
a0af42fc 930 yy_symbol_print (stderr, yystos[yys->yylrState],
327afc7c 931 NULL]b4_locations_if([, &yys->yyloc])[]b4_user_args[);
2f4f028d 932 YYFPRINTF (stderr, "\n");
a4cf101a
PE
933 }
934#endif
a4cf101a 935
42a6501d 936 if (yys->yysemantics.yyfirstVal)
69ce078b
PE
937 {
938 yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
939 yyGLRState *yyrh;
940 int yyn;
941 for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
942 yyn > 0;
943 yyrh = yyrh->yypred, yyn -= 1)
944 yydestroyGLRState (yymsg, yyrh]b4_user_args[);
945 }
42a6501d 946 }
01241d47
PH
947}
948
9d9b8b70 949/** Left-hand-side symbol for rule #RULE. */
01241d47 950static inline yySymbol
fb8135fa 951yylhsNonterm (yyRuleNum yyrule)
01241d47
PH
952{
953 return yyr1[yyrule];
954}
955
f2b30bdf 956#define yypact_value_is_default(yystate) \
87412882 957 ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[
944ed9f4 958
01241d47 959/** True iff LR state STATE has only a default reduction (regardless
9d9b8b70 960 * of token). */
f7c398aa 961static inline yybool
01241d47
PH
962yyisDefaultedState (yyStateNum yystate)
963{
f2b30bdf 964 return yypact_value_is_default (yypact[yystate]);
01241d47 965}
fb8135fa 966
9d9b8b70 967/** The default reduction for STATE, assuming it has one. */
01241d47
PH
968static inline yyRuleNum
969yydefaultAction (yyStateNum yystate)
970{
971 return yydefact[yystate];
972}
973
f2b30bdf 974#define yytable_value_is_error(yytable_value) \
aa0cb40d 975 ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[
944ed9f4 976
2a1fe6ed 977/** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
01241d47
PH
978 * Result R means
979 * R < 0: Reduce on rule -R.
980 * R = 0: Error.
fb8135fa
AD
981 * R > 0: Shift to state R.
982 * Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
01241d47
PH
983 * conflicting reductions.
984 */
985static inline void
fb8135fa 986yygetLRActions (yyStateNum yystate, int yytoken,
69ce078b 987 int* yyaction, const short int** yyconflicts)
01241d47
PH
988{
989 int yyindex = yypact[yystate] + yytoken;
f2b30bdf
JD
990 if (yypact_value_is_default (yypact[yystate])
991 || yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
01241d47
PH
992 {
993 *yyaction = -yydefact[yystate];
994 *yyconflicts = yyconfl;
995 }
f2b30bdf 996 else if (! yytable_value_is_error (yytable[yyindex]))
01241d47
PH
997 {
998 *yyaction = yytable[yyindex];
999 *yyconflicts = yyconfl + yyconflp[yyindex];
1000 }
f50adbbd
AD
1001 else
1002 {
1003 *yyaction = 0;
1004 *yyconflicts = yyconfl + yyconflp[yyindex];
1005 }
01241d47
PH
1006}
1007
1008static inline yyStateNum
1009yyLRgotoState (yyStateNum yystate, yySymbol yylhs)
1010{
7580c379 1011 int yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
34ec3579 1012 if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
01241d47
PH
1013 return yytable[yyr];
1014 else
1015 return yydefgoto[yylhs - YYNTOKENS];
1016}
1017
f7c398aa 1018static inline yybool
fb8135fa 1019yyisShiftAction (int yyaction)
01241d47 1020{
39912f52 1021 return 0 < yyaction;
01241d47
PH
1022}
1023
f7c398aa 1024static inline yybool
fb8135fa 1025yyisErrorAction (int yyaction)
01241d47 1026{
f50adbbd 1027 return yyaction == 0;
01241d47
PH
1028}
1029
1030 /* GLRStates */
1031
02998094
AD
1032/** Return a fresh GLRStackItem. Callers should call
1033 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1034 * headroom. */
1035
1036static inline yyGLRStackItem*
3e7a2cd9 1037yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState)
02998094 1038{
3e7a2cd9
PE
1039 yyGLRStackItem* yynewItem = yystackp->yynextFree;
1040 yystackp->yyspaceLeft -= 1;
1041 yystackp->yynextFree += 1;
02998094
AD
1042 yynewItem->yystate.yyisState = yyisState;
1043 return yynewItem;
1044}
1045
12f4614d
PH
1046/** Add a new semantic action that will execute the action for rule
1047 * RULENUM on the semantic values in RHS to the list of
c66dfadd 1048 * alternative actions for STATE. Assumes that RHS comes from
12f4614d 1049 * stack #K of *STACKP. */
1154cced 1050static void
bf70fa87 1051yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate,
8452c667 1052 yyGLRState* yyrhs, yyRuleNum yyrule)
01241d47 1053{
02998094 1054 yySemanticOption* yynewOption =
3e7a2cd9 1055 &yynewGLRStackItem (yystackp, yyfalse)->yyoption;
8452c667 1056 yynewOption->yystate = yyrhs;
02998094 1057 yynewOption->yyrule = yyrule;
b7691f15 1058 if (yystackp->yytops.yylookaheadNeeds[yyk])
bf70fa87
JD
1059 {
1060 yynewOption->yyrawchar = yychar;
1061 yynewOption->yyval = yylval;
1062 yynewOption->yyloc = yylloc;
1063 }
1064 else
1065 yynewOption->yyrawchar = YYEMPTY;
02998094
AD
1066 yynewOption->yynext = yystate->yysemantics.yyfirstVal;
1067 yystate->yysemantics.yyfirstVal = yynewOption;
1068
3e7a2cd9 1069 YY_RESERVE_GLRSTACK (yystackp);
01241d47
PH
1070}
1071
1072 /* GLRStacks */
1073
9d9b8b70 1074/** Initialize SET to a singleton set containing an empty stack. */
63cb01d6 1075static yybool
01241d47
PH
1076yyinitStateSet (yyGLRStateSet* yyset)
1077{
1078 yyset->yysize = 1;
1079 yyset->yycapacity = 16;
be16239b 1080 yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]);
63cb01d6
PE
1081 if (! yyset->yystates)
1082 return yyfalse;
01241d47 1083 yyset->yystates[0] = NULL;
b7691f15
JD
1084 yyset->yylookaheadNeeds =
1085 (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]);
1086 if (! yyset->yylookaheadNeeds)
bf70fa87
JD
1087 {
1088 YYFREE (yyset->yystates);
1089 return yyfalse;
1090 }
63cb01d6 1091 return yytrue;
01241d47
PH
1092}
1093
fb8135fa 1094static void yyfreeStateSet (yyGLRStateSet* yyset)
01241d47 1095{
a525b568 1096 YYFREE (yyset->yystates);
b7691f15 1097 YYFREE (yyset->yylookaheadNeeds);
01241d47
PH
1098}
1099
1100/** Initialize STACK to a single empty stack, with total maximum
9d9b8b70 1101 * capacity for all stacks of SIZE. */
63cb01d6 1102static yybool
3e7a2cd9 1103yyinitGLRStack (yyGLRStack* yystackp, size_t yysize)
01241d47 1104{
3e7a2cd9 1105 yystackp->yyerrState = 0;
01241d47 1106 yynerrs = 0;
3e7a2cd9
PE
1107 yystackp->yyspaceLeft = yysize;
1108 yystackp->yyitems =
1109 (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]);
1110 if (!yystackp->yyitems)
3922956a 1111 return yyfalse;
3e7a2cd9
PE
1112 yystackp->yynextFree = yystackp->yyitems;
1113 yystackp->yysplitPoint = NULL;
1114 yystackp->yylastDeleted = NULL;
1115 return yyinitStateSet (&yystackp->yytops);
01241d47
PH
1116}
1117
02998094
AD
1118
1119#if YYSTACKEXPANDABLE
1120# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
01241d47
PH
1121 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1122
1123/** If STACK is expandable, extend it. WARNING: Pointers into the
1124 stack from outside should be considered invalid after this call.
1125 We always expand when there are 1 or fewer items left AFTER an
1126 allocation, so that we can avoid having external pointers exist
9d9b8b70 1127 across an allocation. */
01241d47 1128static void
3e7a2cd9 1129yyexpandGLRStack (yyGLRStack* yystackp)
01241d47 1130{
63cb01d6 1131 yyGLRStackItem* yynewItems;
01241d47
PH
1132 yyGLRStackItem* yyp0, *yyp1;
1133 size_t yysize, yynewSize;
1134 size_t yyn;
3e7a2cd9 1135 yysize = yystackp->yynextFree - yystackp->yyitems;
18d9185c 1136 if (YYMAXDEPTH - YYHEADROOM < yysize)
3e7a2cd9 1137 yyMemoryExhausted (yystackp);
01241d47 1138 yynewSize = 2*yysize;
39912f52 1139 if (YYMAXDEPTH < yynewSize)
01241d47 1140 yynewSize = YYMAXDEPTH;
63cb01d6
PE
1141 yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]);
1142 if (! yynewItems)
3e7a2cd9
PE
1143 yyMemoryExhausted (yystackp);
1144 for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize;
39912f52 1145 0 < yyn;
fb8135fa 1146 yyn -= 1, yyp0 += 1, yyp1 += 1)
01241d47
PH
1147 {
1148 *yyp1 = *yyp0;
f7c398aa 1149 if (*(yybool *) yyp0)
fb8135fa 1150 {
01241d47
PH
1151 yyGLRState* yys0 = &yyp0->yystate;
1152 yyGLRState* yys1 = &yyp1->yystate;
fb8135fa
AD
1153 if (yys0->yypred != NULL)
1154 yys1->yypred =
01241d47
PH
1155 YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
1156 if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != NULL)
fb8135fa 1157 yys1->yysemantics.yyfirstVal =
01241d47
PH
1158 YYRELOC(yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
1159 }
fb8135fa 1160 else
01241d47
PH
1161 {
1162 yySemanticOption* yyv0 = &yyp0->yyoption;
1163 yySemanticOption* yyv1 = &yyp1->yyoption;
1164 if (yyv0->yystate != NULL)
1165 yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
1166 if (yyv0->yynext != NULL)
1167 yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
1168 }
1169 }
3e7a2cd9
PE
1170 if (yystackp->yysplitPoint != NULL)
1171 yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems,
1172 yystackp->yysplitPoint, yystate);
1173
1174 for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1)
1175 if (yystackp->yytops.yystates[yyn] != NULL)
1176 yystackp->yytops.yystates[yyn] =
1177 YYRELOC (yystackp->yyitems, yynewItems,
1178 yystackp->yytops.yystates[yyn], yystate);
1179 YYFREE (yystackp->yyitems);
1180 yystackp->yyitems = yynewItems;
1181 yystackp->yynextFree = yynewItems + yysize;
1182 yystackp->yyspaceLeft = yynewSize - yysize;
01241d47 1183}
02998094 1184#endif
01241d47
PH
1185
1186static void
3e7a2cd9 1187yyfreeGLRStack (yyGLRStack* yystackp)
01241d47 1188{
3e7a2cd9
PE
1189 YYFREE (yystackp->yyitems);
1190 yyfreeStateSet (&yystackp->yytops);
01241d47
PH
1191}
1192
1193/** Assuming that S is a GLRState somewhere on STACK, update the
fb8135fa 1194 * splitpoint of STACK, if needed, so that it is at least as deep as
9d9b8b70 1195 * S. */
01241d47 1196static inline void
3e7a2cd9 1197yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys)
01241d47 1198{
3e7a2cd9
PE
1199 if (yystackp->yysplitPoint != NULL && yystackp->yysplitPoint > yys)
1200 yystackp->yysplitPoint = yys;
01241d47
PH
1201}
1202
9d9b8b70 1203/** Invalidate stack #K in STACK. */
01241d47 1204static inline void
3e7a2cd9 1205yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk)
01241d47 1206{
3e7a2cd9
PE
1207 if (yystackp->yytops.yystates[yyk] != NULL)
1208 yystackp->yylastDeleted = yystackp->yytops.yystates[yyk];
1209 yystackp->yytops.yystates[yyk] = NULL;
01241d47
PH
1210}
1211
fb8135fa 1212/** Undelete the last stack that was marked as deleted. Can only be
01241d47 1213 done once after a deletion, and only when all other stacks have
9d9b8b70 1214 been deleted. */
01241d47 1215static void
3e7a2cd9 1216yyundeleteLastStack (yyGLRStack* yystackp)
01241d47 1217{
3e7a2cd9 1218 if (yystackp->yylastDeleted == NULL || yystackp->yytops.yysize != 0)
01241d47 1219 return;
3e7a2cd9
PE
1220 yystackp->yytops.yystates[0] = yystackp->yylastDeleted;
1221 yystackp->yytops.yysize = 1;
2f4f028d 1222 YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
3e7a2cd9 1223 yystackp->yylastDeleted = NULL;
01241d47
PH
1224}
1225
1226static inline void
3e7a2cd9 1227yyremoveDeletes (yyGLRStack* yystackp)
01241d47 1228{
1154cced 1229 size_t yyi, yyj;
01241d47 1230 yyi = yyj = 0;
3e7a2cd9 1231 while (yyj < yystackp->yytops.yysize)
01241d47 1232 {
3e7a2cd9 1233 if (yystackp->yytops.yystates[yyi] == NULL)
01241d47 1234 {
1154cced 1235 if (yyi == yyj)
ee16363f 1236 {
2f4f028d 1237 YYDPRINTF ((stderr, "Removing dead stacks.\n"));
ee16363f 1238 }
3e7a2cd9 1239 yystackp->yytops.yysize -= 1;
01241d47 1240 }
fb8135fa 1241 else
01241d47 1242 {
3e7a2cd9 1243 yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi];
bf70fa87 1244 /* In the current implementation, it's unnecessary to copy
b7691f15 1245 yystackp->yytops.yylookaheadNeeds[yyi] since, after
bf70fa87
JD
1246 yyremoveDeletes returns, the parser immediately either enters
1247 deterministic operation or shifts a token. However, it doesn't
1248 hurt, and the code might evolve to need it. */
b7691f15
JD
1249 yystackp->yytops.yylookaheadNeeds[yyj] =
1250 yystackp->yytops.yylookaheadNeeds[yyi];
01241d47 1251 if (yyj != yyi)
ee16363f 1252 {
08fc98e5
PE
1253 YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
1254 (unsigned long int) yyi, (unsigned long int) yyj));
ee16363f 1255 }
01241d47
PH
1256 yyj += 1;
1257 }
1258 yyi += 1;
1259 }
1260}
1261
fb8135fa 1262/** Shift to a new state on stack #K of STACK, corresponding to LR state
9d9b8b70 1263 * LRSTATE, at input position POSN, with (resolved) semantic value SVAL. */
01241d47 1264static inline void
3e7a2cd9 1265yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
63cb01d6 1266 size_t yyposn,
3e7a2cd9 1267 YYSTYPE* yyvalp, YYLTYPE* yylocp)
01241d47 1268{
3e7a2cd9 1269 yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
01241d47 1270
02998094
AD
1271 yynewState->yylrState = yylrState;
1272 yynewState->yyposn = yyposn;
1273 yynewState->yyresolved = yytrue;
3e7a2cd9
PE
1274 yynewState->yypred = yystackp->yytops.yystates[yyk];
1275 yynewState->yysemantics.yysval = *yyvalp;
02998094 1276 yynewState->yyloc = *yylocp;
3e7a2cd9 1277 yystackp->yytops.yystates[yyk] = yynewState;
02998094 1278
3e7a2cd9 1279 YY_RESERVE_GLRSTACK (yystackp);
01241d47
PH
1280}
1281
f868dc04 1282/** Shift stack #K of YYSTACK, to a new state corresponding to LR
c4749565 1283 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
9d9b8b70 1284 * semantic value of YYRHS under the action for YYRULE. */
01241d47 1285static inline void
3e7a2cd9 1286yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
8452c667 1287 size_t yyposn, yyGLRState* yyrhs, yyRuleNum yyrule)
01241d47 1288{
3e7a2cd9 1289 yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
02998094
AD
1290
1291 yynewState->yylrState = yylrState;
1292 yynewState->yyposn = yyposn;
1293 yynewState->yyresolved = yyfalse;
3e7a2cd9 1294 yynewState->yypred = yystackp->yytops.yystates[yyk];
02998094 1295 yynewState->yysemantics.yyfirstVal = NULL;
3e7a2cd9 1296 yystackp->yytops.yystates[yyk] = yynewState;
02998094 1297
9d9b8b70 1298 /* Invokes YY_RESERVE_GLRSTACK. */
8452c667 1299 yyaddDeferredAction (yystackp, yyk, yynewState, yyrhs, yyrule);
01241d47
PH
1300}
1301
1302/** Pop the symbols consumed by reduction #RULE from the top of stack
fb8135fa
AD
1303 * #K of STACK, and perform the appropriate semantic action on their
1304 * semantic values. Assumes that all ambiguities in semantic values
9d9b8b70 1305 * have been previously resolved. Set *VALP to the resulting value,
01241d47 1306 * and *LOCP to the computed location (if any). Return value is as
9d9b8b70 1307 * for userAction. */
ff032592 1308static inline YYRESULTTAG
3e7a2cd9 1309yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
5cc16ecc 1310 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
01241d47
PH
1311{
1312 int yynrhs = yyrhsLength (yyrule);
1313
3e7a2cd9 1314 if (yystackp->yysplitPoint == NULL)
01241d47 1315 {
9d9b8b70 1316 /* Standard special case: single stack. */
8452c667 1317 yyGLRStackItem* yyrhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
64c4fd52 1318 YYASSERT (yyk == 0);
3e7a2cd9
PE
1319 yystackp->yynextFree -= yynrhs;
1320 yystackp->yyspaceLeft += yynrhs;
1321 yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
8452c667 1322 return yyuserAction (yyrule, yynrhs, yyrhs,
3e7a2cd9 1323 yyvalp, yylocp, yystackp]b4_user_args[);
01241d47 1324 }
fb8135fa 1325 else
01241d47 1326 {
44e7ead1
PH
1327 /* At present, doAction is never called in nondeterministic
1328 * mode, so this branch is never taken. It is here in
1329 * anticipation of a future feature that will allow immediate
9d9b8b70 1330 * evaluation of selected actions in nondeterministic mode. */
01241d47
PH
1331 int yyi;
1332 yyGLRState* yys;
25005f6a 1333 yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
5cc16ecc 1334 yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
327afc7c 1335 = yystackp->yytops.yystates[yyk];]b4_locations_if([[
44e7ead1 1336 if (yynrhs == 0)
9d9b8b70 1337 /* Set default location. */
69ce078b 1338 yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
f868dc04 1339 for (yyi = 0; yyi < yynrhs; yyi += 1)
01241d47 1340 {
f868dc04 1341 yys = yys->yypred;
64c4fd52 1342 YYASSERT (yys);
01241d47 1343 }
3e7a2cd9
PE
1344 yyupdateSplit (yystackp, yys);
1345 yystackp->yytops.yystates[yyk] = yys;
25005f6a 1346 return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
3e7a2cd9 1347 yyvalp, yylocp, yystackp]b4_user_args[);
01241d47
PH
1348 }
1349}
1350
e7cb57c0 1351#if !YYDEBUG
62b08cfc 1352# define YY_REDUCE_PRINT(Args)
e7cb57c0 1353#else
62b08cfc 1354# define YY_REDUCE_PRINT(Args) \
e7cb57c0
AD
1355do { \
1356 if (yydebug) \
62b08cfc 1357 yy_reduce_print Args; \
12ce2df6 1358} while (YYID (0))
e7cb57c0
AD
1359
1360/*----------------------------------------------------------.
1361| Report that the RULE is going to be reduced on stack #K. |
1362`----------------------------------------------------------*/
1363
12ce2df6 1364/*ARGSUSED*/ static inline void
e9e61b00 1365yy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule]b4_user_formals[)
e7cb57c0 1366{
62b08cfc
AD
1367 int yynrhs = yyrhsLength (yyrule);
1368 yybool yynormal __attribute__ ((__unused__)) =
3e7a2cd9
PE
1369 (yystackp->yysplitPoint == NULL);
1370 yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
62b08cfc 1371 int yylow = 1;
e7cb57c0 1372 int yyi;
613d8952
AD
1373]b4_parse_param_use[]dnl
1374[ YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n",
08fc98e5
PE
1375 (unsigned long int) yyk, yyrule - 1,
1376 (unsigned long int) yyrline[yyrule]);
6de5398d 1377 /* The symbols being reduced. */
62b08cfc
AD
1378 for (yyi = 0; yyi < yynrhs; yyi++)
1379 {
f57a7536 1380 YYFPRINTF (stderr, " $%d = ", yyi + 1);
783aa653
AD
1381 yy_symbol_print (stderr,
1382 ]yystos@{b4_rhs_data(yynrhs, yyi + 1).yylrState@}[,
a0af42fc 1383 &]b4_rhs_value(yynrhs, yyi + 1)[
327afc7c 1384 ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
a0af42fc 1385 b4_user_args[);
f57a7536 1386 YYFPRINTF (stderr, "\n");
62b08cfc 1387 }
e7cb57c0
AD
1388}
1389#endif
1390
01241d47
PH
1391/** Pop items off stack #K of STACK according to grammar rule RULE,
1392 * and push back on the resulting nonterminal symbol. Perform the
fb8135fa 1393 * semantic action associated with RULE and store its value with the
01241d47
PH
1394 * newly pushed state, if FORCEEVAL or if STACK is currently
1395 * unambiguous. Otherwise, store the deferred semantic action with
1396 * the new state. If the new state would have an identical input
1397 * position, LR state, and predecessor to an existing state on the stack,
fb8135fa 1398 * it is identified with that existing state, eliminating stack #K from
9d9b8b70 1399 * the STACK. In this case, the (necessarily deferred) semantic value is
fb8135fa 1400 * added to the options for the existing state's semantic value.
01241d47
PH
1401 */
1402static inline YYRESULTTAG
3e7a2cd9 1403yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
69ce078b 1404 yybool yyforceEval]b4_user_formals[)
01241d47 1405{
3e7a2cd9 1406 size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
01241d47 1407
3e7a2cd9 1408 if (yyforceEval || yystackp->yysplitPoint == NULL)
01241d47
PH
1409 {
1410 YYSTYPE yysval;
1411 YYLTYPE yyloc;
fb8135fa 1412
e9e61b00 1413 YY_REDUCE_PRINT ((yystackp, yyk, yyrule]b4_user_args[));
3e7a2cd9
PE
1414 YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval,
1415 &yyloc]b4_user_args[));
62b08cfc 1416 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
3e7a2cd9
PE
1417 yyglrShift (yystackp, yyk,
1418 yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
01241d47 1419 yylhsNonterm (yyrule)),
3e7a2cd9 1420 yyposn, &yysval, &yyloc);
01241d47 1421 }
fb8135fa 1422 else
01241d47 1423 {
1154cced
AD
1424 size_t yyi;
1425 int yyn;
3e7a2cd9 1426 yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk];
01241d47
PH
1427 yyStateNum yynewLRState;
1428
3e7a2cd9 1429 for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule);
39912f52 1430 0 < yyn; yyn -= 1)
01241d47
PH
1431 {
1432 yys = yys->yypred;
64c4fd52 1433 YYASSERT (yys);
01241d47 1434 }
3e7a2cd9 1435 yyupdateSplit (yystackp, yys);
01241d47 1436 yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
fb8135fa 1437 YYDPRINTF ((stderr,
9d9b8b70 1438 "Reduced stack %lu by rule #%d; action deferred. Now in state %d.\n",
08fc98e5 1439 (unsigned long int) yyk, yyrule - 1, yynewLRState));
3e7a2cd9
PE
1440 for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
1441 if (yyi != yyk && yystackp->yytops.yystates[yyi] != NULL)
01241d47 1442 {
3e7a2cd9
PE
1443 yyGLRState* yyp, *yysplit = yystackp->yysplitPoint;
1444 yyp = yystackp->yytops.yystates[yyi];
fb8135fa 1445 while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
01241d47 1446 {
fb8135fa 1447 if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
01241d47 1448 {
bf70fa87 1449 yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule);
3e7a2cd9 1450 yymarkStackDeleted (yystackp, yyk);
08fc98e5
PE
1451 YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
1452 (unsigned long int) yyk,
1453 (unsigned long int) yyi));
ff032592 1454 return yyok;
01241d47
PH
1455 }
1456 yyp = yyp->yypred;
1457 }
1458 }
3e7a2cd9
PE
1459 yystackp->yytops.yystates[yyk] = yys;
1460 yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule);
fb8135fa 1461 }
ff032592 1462 return yyok;
01241d47
PH
1463}
1464
63cb01d6 1465static size_t
3e7a2cd9 1466yysplitStack (yyGLRStack* yystackp, size_t yyk)
01241d47 1467{
3e7a2cd9 1468 if (yystackp->yysplitPoint == NULL)
01241d47 1469 {
64c4fd52 1470 YYASSERT (yyk == 0);
3e7a2cd9 1471 yystackp->yysplitPoint = yystackp->yytops.yystates[yyk];
01241d47 1472 }
3e7a2cd9 1473 if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity)
01241d47 1474 {
63cb01d6 1475 yyGLRState** yynewStates;
b7691f15 1476 yybool* yynewLookaheadNeeds;
ddee1b06
PH
1477
1478 yynewStates = NULL;
c66dfadd 1479
ddee1b06
PH
1480 if (yystackp->yytops.yycapacity
1481 > (YYSIZEMAX / (2 * sizeof yynewStates[0])))
1482 yyMemoryExhausted (yystackp);
1483 yystackp->yytops.yycapacity *= 2;
1484
1485 yynewStates =
1486 (yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
1487 (yystackp->yytops.yycapacity
1488 * sizeof yynewStates[0]));
1489 if (yynewStates == NULL)
3e7a2cd9
PE
1490 yyMemoryExhausted (yystackp);
1491 yystackp->yytops.yystates = yynewStates;
ddee1b06 1492
b7691f15
JD
1493 yynewLookaheadNeeds =
1494 (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds,
ddee1b06 1495 (yystackp->yytops.yycapacity
b7691f15
JD
1496 * sizeof yynewLookaheadNeeds[0]));
1497 if (yynewLookaheadNeeds == NULL)
bf70fa87 1498 yyMemoryExhausted (yystackp);
b7691f15 1499 yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds;
01241d47 1500 }
3e7a2cd9
PE
1501 yystackp->yytops.yystates[yystackp->yytops.yysize]
1502 = yystackp->yytops.yystates[yyk];
b7691f15
JD
1503 yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize]
1504 = yystackp->yytops.yylookaheadNeeds[yyk];
3e7a2cd9
PE
1505 yystackp->yytops.yysize += 1;
1506 return yystackp->yytops.yysize-1;
01241d47
PH
1507}
1508
1509/** True iff Y0 and Y1 represent identical options at the top level.
1510 * That is, they represent the same rule applied to RHS symbols
9d9b8b70 1511 * that produce the same terminal symbols. */
f7c398aa 1512static yybool
01241d47
PH
1513yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1)
1514{
fb8135fa 1515 if (yyy0->yyrule == yyy1->yyrule)
01241d47
PH
1516 {
1517 yyGLRState *yys0, *yys1;
1518 int yyn;
fb8135fa 1519 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
01241d47
PH
1520 yyn = yyrhsLength (yyy0->yyrule);
1521 yyn > 0;
1522 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
1523 if (yys0->yyposn != yys1->yyposn)
1524 return yyfalse;
1525 return yytrue;
1526 }
1527 else
1528 return yyfalse;
1529}
1530
5e6f62f2 1531/** Assuming identicalOptions (Y0,Y1), destructively merge the
9d9b8b70 1532 * alternative semantic values for the RHS-symbols of Y1 and Y0. */
01241d47
PH
1533static void
1534yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1)
1535{
1536 yyGLRState *yys0, *yys1;
1537 int yyn;
fb8135fa 1538 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
01241d47
PH
1539 yyn = yyrhsLength (yyy0->yyrule);
1540 yyn > 0;
1541 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
5e6f62f2
PH
1542 {
1543 if (yys0 == yys1)
1544 break;
010f91c3 1545 else if (yys0->yyresolved)
5e6f62f2
PH
1546 {
1547 yys1->yyresolved = yytrue;
1548 yys1->yysemantics.yysval = yys0->yysemantics.yysval;
1549 }
1550 else if (yys1->yyresolved)
1551 {
1552 yys0->yyresolved = yytrue;
1553 yys0->yysemantics.yysval = yys1->yysemantics.yysval;
1554 }
010f91c3 1555 else
5e6f62f2
PH
1556 {
1557 yySemanticOption** yyz0p;
1558 yySemanticOption* yyz1;
1559 yyz0p = &yys0->yysemantics.yyfirstVal;
1560 yyz1 = yys1->yysemantics.yyfirstVal;
3e7a2cd9 1561 while (YYID (yytrue))
5e6f62f2
PH
1562 {
1563 if (yyz1 == *yyz0p || yyz1 == NULL)
1564 break;
1565 else if (*yyz0p == NULL)
1566 {
1567 *yyz0p = yyz1;
1568 break;
1569 }
1570 else if (*yyz0p < yyz1)
1571 {
1572 yySemanticOption* yyz = *yyz0p;
1573 *yyz0p = yyz1;
1574 yyz1 = yyz1->yynext;
1575 (*yyz0p)->yynext = yyz;
1576 }
1577 yyz0p = &(*yyz0p)->yynext;
1578 }
1579 yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal;
1580 }
1581 }
01241d47
PH
1582}
1583
1584/** Y0 and Y1 represent two possible actions to take in a given
1585 * parsing state; return 0 if no combination is possible,
9d9b8b70 1586 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
01241d47 1587static int
1154cced 1588yypreference (yySemanticOption* y0, yySemanticOption* y1)
01241d47 1589{
1154cced
AD
1590 yyRuleNum r0 = y0->yyrule, r1 = y1->yyrule;
1591 int p0 = yydprec[r0], p1 = yydprec[r1];
01241d47 1592
1154cced 1593 if (p0 == p1)
01241d47 1594 {
1154cced 1595 if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1])
01241d47
PH
1596 return 0;
1597 else
1598 return 1;
1599 }
1154cced 1600 if (p0 == 0 || p1 == 0)
01241d47 1601 return 0;
1154cced 1602 if (p0 < p1)
01241d47 1603 return 3;
39912f52 1604 if (p1 < p0)
01241d47
PH
1605 return 2;
1606 return 0;
1607}
1608
d659304d 1609static YYRESULTTAG yyresolveValue (yyGLRState* yys,
520181ab
JD
1610 yyGLRStack* yystackp]b4_user_formals[);
1611
01241d47 1612
520181ab
JD
1613/** Resolve the previous N states starting at and including state S. If result
1614 * != yyok, some states may have been left unresolved possibly with empty
1615 * semantic option chains. Regardless of whether result = yyok, each state
1616 * has been left with consistent data so that yydestroyGLRState can be invoked
1617 * if necessary. */
01241d47 1618static YYRESULTTAG
3e7a2cd9
PE
1619yyresolveStates (yyGLRState* yys, int yyn,
1620 yyGLRStack* yystackp]b4_user_formals[)
01241d47 1621{
39912f52 1622 if (0 < yyn)
01241d47 1623 {
64c4fd52 1624 YYASSERT (yys->yypred);
d659304d 1625 YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp]b4_user_args[));
fb8135fa 1626 if (! yys->yyresolved)
520181ab 1627 YYCHK (yyresolveValue (yys, yystackp]b4_user_args[));
01241d47
PH
1628 }
1629 return yyok;
1630}
1631
520181ab
JD
1632/** Resolve the states for the RHS of OPT, perform its user action, and return
1633 * the semantic value and location. Regardless of whether result = yyok, all
1634 * RHS states have been destroyed (assuming the user action destroys all RHS
1635 * semantic values if invoked). */
01241d47 1636static YYRESULTTAG
3e7a2cd9 1637yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
69ce078b 1638 YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
01241d47 1639{
25005f6a 1640 yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
f868dc04 1641 int yynrhs;
bf70fa87
JD
1642 int yychar_current;
1643 YYSTYPE yylval_current;
1644 YYLTYPE yylloc_current;
520181ab 1645 YYRESULTTAG yyflag;
01241d47
PH
1646
1647 yynrhs = yyrhsLength (yyopt->yyrule);
520181ab
JD
1648 yyflag = yyresolveStates (yyopt->yystate, yynrhs, yystackp]b4_user_args[);
1649 if (yyflag != yyok)
1650 {
1651 yyGLRState *yys;
1652 for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1)
1653 yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
1654 return yyflag;
1655 }
1656
327afc7c 1657 yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate;]b4_locations_if([[
44e7ead1 1658 if (yynrhs == 0)
9d9b8b70 1659 /* Set default location. */
44e7ead1 1660 yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc;]])[
bf70fa87
JD
1661 yychar_current = yychar;
1662 yylval_current = yylval;
1663 yylloc_current = yylloc;
1664 yychar = yyopt->yyrawchar;
1665 yylval = yyopt->yyval;
1666 yylloc = yyopt->yyloc;
520181ab 1667 yyflag = yyuserAction (yyopt->yyrule, yynrhs,
bf70fa87
JD
1668 yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
1669 yyvalp, yylocp, yystackp]b4_user_args[);
1670 yychar = yychar_current;
1671 yylval = yylval_current;
1672 yylloc = yylloc_current;
520181ab 1673 return yyflag;
01241d47
PH
1674}
1675
1676#if YYDEBUG
e7cb57c0
AD
1677static void
1678yyreportTree (yySemanticOption* yyx, int yyindent)
01241d47
PH
1679{
1680 int yynrhs = yyrhsLength (yyx->yyrule);
1681 int yyi;
1682 yyGLRState* yys;
9138c575 1683 yyGLRState* yystates[1 + YYMAXRHS];
782a05f9 1684 yyGLRState yyleftmost_state;
01241d47 1685
39912f52 1686 for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
01241d47
PH
1687 yystates[yyi] = yys;
1688 if (yys == NULL)
782a05f9
PE
1689 {
1690 yyleftmost_state.yyposn = 0;
1691 yystates[0] = &yyleftmost_state;
1692 }
01241d47
PH
1693 else
1694 yystates[0] = yys;
1695
39912f52 1696 if (yyx->yystate->yyposn < yys->yyposn + 1)
01241d47 1697 YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
fb8135fa 1698 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
9138c575 1699 yyx->yyrule - 1);
01241d47 1700 else
08fc98e5 1701 YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
01241d47 1702 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
9138c575 1703 yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1),
08fc98e5 1704 (unsigned long int) yyx->yystate->yyposn);
fb8135fa 1705 for (yyi = 1; yyi <= yynrhs; yyi += 1)
01241d47 1706 {
fb8135fa 1707 if (yystates[yyi]->yyresolved)
01241d47
PH
1708 {
1709 if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
1710 YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
783aa653 1711 yytokenName (yystos[yystates[yyi-1]->yylrState]));
01241d47 1712 else
08fc98e5 1713 YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
783aa653
AD
1714 yytokenName (yystos[yystates[yyi-1]->yylrState]),
1715 (unsigned long int) (yystates[yyi-1]->yyposn + 1),
08fc98e5 1716 (unsigned long int) yystates[yyi]->yyposn);
01241d47 1717 }
fb8135fa 1718 else
01241d47
PH
1719 yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
1720 }
1721}
fb8135fa 1722#endif
01241d47 1723
35ee866a
JD
1724/*ARGSUSED*/ static YYRESULTTAG
1725yyreportAmbiguity (yySemanticOption* yyx0,
1726 yySemanticOption* yyx1]b4_pure_formals[)
01241d47 1727{
2a4647a3
PE
1728 YYUSE (yyx0);
1729 YYUSE (yyx1);
1154cced 1730
01241d47 1731#if YYDEBUG
2f4f028d
PE
1732 YYFPRINTF (stderr, "Ambiguity detected.\n");
1733 YYFPRINTF (stderr, "Option 1,\n");
01241d47 1734 yyreportTree (yyx0, 2);
2f4f028d 1735 YYFPRINTF (stderr, "\nOption 2,\n");
01241d47 1736 yyreportTree (yyx1, 2);
2f4f028d 1737 YYFPRINTF (stderr, "\n");
01241d47 1738#endif
35ee866a
JD
1739
1740 yyerror (]b4_yyerror_args[YY_("syntax is ambiguous"));
1741 return yyabort;
01241d47
PH
1742}
1743
6d05403d
PE
1744/** Starting at and including state S1, resolve the location for each of the
1745 * previous N1 states that is unresolved. The first semantic option of a state
8710fc41
JD
1746 * is always chosen. */
1747static void
6d05403d 1748yyresolveLocations (yyGLRState* yys1, int yyn1,
8710fc41
JD
1749 yyGLRStack *yystackp]b4_user_formals[)
1750{
6d05403d 1751 if (0 < yyn1)
8710fc41 1752 {
6d05403d
PE
1753 yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp]b4_user_args[);
1754 if (!yys1->yyresolved)
8710fc41
JD
1755 {
1756 yySemanticOption *yyoption;
6d05403d 1757 yyGLRStackItem yyrhsloc[1 + YYMAXRHS];
8710fc41
JD
1758 int yynrhs;
1759 int yychar_current;
1760 YYSTYPE yylval_current;
1761 YYLTYPE yylloc_current;
6d05403d 1762 yyoption = yys1->yysemantics.yyfirstVal;
8710fc41
JD
1763 YYASSERT (yyoption != NULL);
1764 yynrhs = yyrhsLength (yyoption->yyrule);
1765 if (yynrhs > 0)
1766 {
1767 yyGLRState *yys;
6d05403d 1768 int yyn;
8710fc41
JD
1769 yyresolveLocations (yyoption->yystate, yynrhs,
1770 yystackp]b4_user_args[);
6d05403d
PE
1771 for (yys = yyoption->yystate, yyn = yynrhs;
1772 yyn > 0;
1773 yys = yys->yypred, yyn -= 1)
1774 yyrhsloc[yyn].yystate.yyloc = yys->yyloc;
8710fc41
JD
1775 }
1776 else
1777 {
5ad0a449
JD
1778 /* Both yyresolveAction and yyresolveLocations traverse the GSS
1779 in reverse rightmost order. It is only necessary to invoke
1780 yyresolveLocations on a subforest for which yyresolveAction
1781 would have been invoked next had an ambiguity not been
1782 detected. Thus the location of the previous state (but not
1783 necessarily the previous state itself) is guaranteed to be
1784 resolved already. */
8710fc41 1785 yyGLRState *yyprevious = yyoption->yystate;
6d05403d 1786 yyrhsloc[0].yystate.yyloc = yyprevious->yyloc;
8710fc41
JD
1787 }
1788 yychar_current = yychar;
1789 yylval_current = yylval;
1790 yylloc_current = yylloc;
1791 yychar = yyoption->yyrawchar;
1792 yylval = yyoption->yyval;
1793 yylloc = yyoption->yyloc;
6d05403d 1794 YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs);
8710fc41
JD
1795 yychar = yychar_current;
1796 yylval = yylval_current;
1797 yylloc = yylloc_current;
1798 }
1799 }
1800}
01241d47 1801
d659304d 1802/** Resolve the ambiguity represented in state S, perform the indicated
520181ab
JD
1803 * actions, and set the semantic value of S. If result != yyok, the chain of
1804 * semantic options in S has been cleared instead or it has been left
1805 * unmodified except that redundant options may have been removed. Regardless
1806 * of whether result = yyok, S has been left with consistent data so that
1807 * yydestroyGLRState can be invoked if necessary. */
01241d47 1808static YYRESULTTAG
520181ab 1809yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp]b4_user_formals[)
01241d47 1810{
d659304d 1811 yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal;
01241d47 1812 yySemanticOption* yybest;
f9315de5 1813 yySemanticOption** yypp;
63cb01d6 1814 yybool yymerge;
520181ab
JD
1815 YYSTYPE yysval;
1816 YYRESULTTAG yyflag;
1817 YYLTYPE *yylocp = &yys->yyloc;
01241d47 1818
fb8135fa 1819 yybest = yyoptionList;
63cb01d6 1820 yymerge = yyfalse;
f9315de5 1821 for (yypp = &yyoptionList->yynext; *yypp != NULL; )
01241d47 1822 {
f9315de5
PE
1823 yySemanticOption* yyp = *yypp;
1824
01241d47 1825 if (yyidenticalOptions (yybest, yyp))
f9315de5
PE
1826 {
1827 yymergeOptionSets (yybest, yyp);
1828 *yypp = yyp->yynext;
1829 }
01241d47 1830 else
f9315de5
PE
1831 {
1832 switch (yypreference (yybest, yyp))
1833 {
1834 case 0:
8710fc41 1835 yyresolveLocations (yys, 1, yystackp]b4_user_args[);
35ee866a 1836 return yyreportAmbiguity (yybest, yyp]b4_pure_args[);
f9315de5
PE
1837 break;
1838 case 1:
1839 yymerge = yytrue;
1840 break;
1841 case 2:
1842 break;
1843 case 3:
1844 yybest = yyp;
1845 yymerge = yyfalse;
1846 break;
ae199bf1 1847 default:
d1101454 1848 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
69ce078b 1849 but some compilers complain if the default case is
ae199bf1
PE
1850 omitted. */
1851 break;
f9315de5
PE
1852 }
1853 yypp = &yyp->yynext;
1854 }
01241d47
PH
1855 }
1856
fb8135fa 1857 if (yymerge)
01241d47 1858 {
f9315de5 1859 yySemanticOption* yyp;
01241d47 1860 int yyprec = yydprec[yybest->yyrule];
520181ab
JD
1861 yyflag = yyresolveAction (yybest, yystackp, &yysval,
1862 yylocp]b4_user_args[);
1863 if (yyflag == yyok)
1864 for (yyp = yybest->yynext; yyp != NULL; yyp = yyp->yynext)
1865 {
1866 if (yyprec == yydprec[yyp->yyrule])
1867 {
1868 YYSTYPE yysval_other;
1869 YYLTYPE yydummy;
1870 yyflag = yyresolveAction (yyp, yystackp, &yysval_other,
1871 &yydummy]b4_user_args[);
1872 if (yyflag != yyok)
1873 {
1874 yydestruct ("Cleanup: discarding incompletely merged value for",
1875 yystos[yys->yylrState],
327afc7c 1876 &yysval]b4_locations_if([, yylocp])[]b4_user_args[);
520181ab
JD
1877 break;
1878 }
1879 yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other);
1880 }
1881 }
1882 }
1883 else
1884 yyflag = yyresolveAction (yybest, yystackp, &yysval, yylocp]b4_user_args[);
1885
1886 if (yyflag == yyok)
1887 {
1888 yys->yyresolved = yytrue;
1889 yys->yysemantics.yysval = yysval;
01241d47
PH
1890 }
1891 else
520181ab
JD
1892 yys->yysemantics.yyfirstVal = NULL;
1893 return yyflag;
01241d47
PH
1894}
1895
1896static YYRESULTTAG
3e7a2cd9 1897yyresolveStack (yyGLRStack* yystackp]b4_user_formals[)
01241d47 1898{
3e7a2cd9 1899 if (yystackp->yysplitPoint != NULL)
01241d47
PH
1900 {
1901 yyGLRState* yys;
1902 int yyn;
1903
3e7a2cd9
PE
1904 for (yyn = 0, yys = yystackp->yytops.yystates[0];
1905 yys != yystackp->yysplitPoint;
01241d47 1906 yys = yys->yypred, yyn += 1)
ee16363f 1907 continue;
3e7a2cd9 1908 YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp
2a8d363a 1909 ]b4_user_args[));
01241d47
PH
1910 }
1911 return yyok;
1912}
1913
1914static void
3e7a2cd9 1915yycompressStack (yyGLRStack* yystackp)
01241d47
PH
1916{
1917 yyGLRState* yyp, *yyq, *yyr;
1918
3e7a2cd9 1919 if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == NULL)
01241d47
PH
1920 return;
1921
3e7a2cd9
PE
1922 for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = NULL;
1923 yyp != yystackp->yysplitPoint;
01241d47
PH
1924 yyr = yyp, yyp = yyq, yyq = yyp->yypred)
1925 yyp->yypred = yyr;
fb8135fa 1926
3e7a2cd9
PE
1927 yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems;
1928 yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1;
1929 yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems;
1930 yystackp->yysplitPoint = NULL;
1931 yystackp->yylastDeleted = NULL;
fb8135fa
AD
1932
1933 while (yyr != NULL)
1934 {
3e7a2cd9 1935 yystackp->yynextFree->yystate = *yyr;
01241d47 1936 yyr = yyr->yypred;
3e7a2cd9
PE
1937 yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate;
1938 yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate;
1939 yystackp->yynextFree += 1;
1940 yystackp->yyspaceLeft -= 1;
01241d47
PH
1941 }
1942}
1943
1944static YYRESULTTAG
3e7a2cd9 1945yyprocessOneStack (yyGLRStack* yystackp, size_t yyk,
9ecafbbf 1946 size_t yyposn]b4_pure_formals[)
01241d47
PH
1947{
1948 int yyaction;
779e7ceb 1949 const short int* yyconflicts;
01241d47 1950 yyRuleNum yyrule;
01241d47 1951
3e7a2cd9 1952 while (yystackp->yytops.yystates[yyk] != NULL)
01241d47 1953 {
3e7a2cd9 1954 yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState;
63cb01d6
PE
1955 YYDPRINTF ((stderr, "Stack %lu Entering state %d\n",
1956 (unsigned long int) yyk, yystate));
01241d47 1957
64c4fd52
PE
1958 YYASSERT (yystate != YYFINAL);
1959
fb8135fa 1960 if (yyisDefaultedState (yystate))
01241d47
PH
1961 {
1962 yyrule = yydefaultAction (yystate);
fb8135fa 1963 if (yyrule == 0)
01241d47 1964 {
63cb01d6
PE
1965 YYDPRINTF ((stderr, "Stack %lu dies.\n",
1966 (unsigned long int) yyk));
3e7a2cd9 1967 yymarkStackDeleted (yystackp, yyk);
01241d47
PH
1968 return yyok;
1969 }
3e7a2cd9 1970 YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse]b4_user_args[));
01241d47 1971 }
fb8135fa 1972 else
01241d47 1973 {
3f001415 1974 yySymbol yytoken;
b7691f15 1975 yystackp->yytops.yylookaheadNeeds[yyk] = yytrue;
3f001415 1976 if (yychar == YYEMPTY)
01241d47 1977 {
2f4f028d 1978 YYDPRINTF ((stderr, "Reading a token: "));
01241d47 1979 yychar = YYLEX;
cf806753
PE
1980 }
1981
1982 if (yychar <= YYEOF)
1983 {
1984 yychar = yytoken = YYEOF;
1985 YYDPRINTF ((stderr, "Now at end of input.\n"));
1986 }
1987 else
1988 {
3f001415
JD
1989 yytoken = YYTRANSLATE (yychar);
1990 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
01241d47 1991 }
cf806753 1992
3f001415 1993 yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
01241d47 1994
fb8135fa 1995 while (*yyconflicts != 0)
01241d47 1996 {
3e7a2cd9 1997 size_t yynewStack = yysplitStack (yystackp, yyk);
63cb01d6
PE
1998 YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n",
1999 (unsigned long int) yynewStack,
2000 (unsigned long int) yyk));
3e7a2cd9 2001 YYCHK (yyglrReduce (yystackp, yynewStack,
df9a1ba4 2002 *yyconflicts, yyfalse]b4_user_args[));
9ecafbbf
AD
2003 YYCHK (yyprocessOneStack (yystackp, yynewStack,
2004 yyposn]b4_pure_args[));
01241d47
PH
2005 yyconflicts += 1;
2006 }
fb8135fa
AD
2007
2008 if (yyisShiftAction (yyaction))
69ce078b 2009 break;
fb8135fa 2010 else if (yyisErrorAction (yyaction))
01241d47 2011 {
63cb01d6
PE
2012 YYDPRINTF ((stderr, "Stack %lu dies.\n",
2013 (unsigned long int) yyk));
3e7a2cd9 2014 yymarkStackDeleted (yystackp, yyk);
01241d47
PH
2015 break;
2016 }
2017 else
9ecafbbf
AD
2018 YYCHK (yyglrReduce (yystackp, yyk, -yyaction,
2019 yyfalse]b4_user_args[));
01241d47
PH
2020 }
2021 }
2022 return yyok;
2023}
2024
3e7a2cd9 2025/*ARGSUSED*/ static void
d6cff4dc 2026yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
01241d47 2027{
3e7a2cd9 2028 if (yystackp->yyerrState == 0)
01241d47 2029 {
fb8135fa 2030#if YYERROR_VERBOSE
93a0df69 2031 int yyn;
3e7a2cd9 2032 yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
d6645148 2033 if (YYPACT_NINF < yyn && yyn <= YYLAST)
01241d47 2034 {
3f001415
JD
2035 yySymbol yytoken = YYTRANSLATE (yychar);
2036 size_t yysize0 = yytnamerr (NULL, yytokenName (yytoken));
63cb01d6
PE
2037 size_t yysize = yysize0;
2038 size_t yysize1;
2039 yybool yysize_overflow = yyfalse;
2040 char* yymsg = NULL;
2041 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
2b008529
AD
2042 /* Internationalized format string. */
2043 const char *yyformat = 0;
2044 /* Arguments of yyformat. */
63cb01d6 2045 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
93a0df69 2046
01241d47 2047 /* Start YYX at -YYN if negative to avoid negative indexes in
87412882
JD
2048 YYCHECK. In other words, skip the first -YYN actions for this
2049 state because they are default actions. */
c4749565 2050 int yyxbegin = yyn < 0 ? -yyn : 0;
93a0df69
PE
2051
2052 /* Stay within bounds of both yycheck and yytname. */
d6645148 2053 int yychecklim = YYLAST - yyn + 1;
c4749565 2054 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
63cb01d6 2055
2b008529
AD
2056 /* Number of reported tokens (one for the "unexpected", one per
2057 "expected"). */
2058 int yycount = 0;
2059 int yyx;
2060
2061 yyarg[yycount++] = yytokenName (yytoken);
93a0df69 2062
c4749565 2063 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
53f036ce 2064 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
f2b30bdf 2065 && !yytable_value_is_error (yytable[yyx + yyn]))
93a0df69 2066 {
63cb01d6 2067 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
01241d47 2068 {
63cb01d6
PE
2069 yycount = 1;
2070 yysize = yysize0;
93a0df69 2071 break;
01241d47 2072 }
63cb01d6 2073 yyarg[yycount++] = yytokenName (yyx);
9e0876fb 2074 yysize1 = yysize + yytnamerr (NULL, yytokenName (yyx));
63cb01d6
PE
2075 yysize_overflow |= yysize1 < yysize;
2076 yysize = yysize1;
93a0df69 2077 }
63cb01d6 2078
2b008529
AD
2079 switch (yycount)
2080 {
2081#define YYCASE_(N, S) \
2082 case N: \
2083 yyformat = S; \
2084 break
2085 YYCASE_(1, YY_("syntax error, unexpected %s"));
2086 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2087 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2088 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2089 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2090#undef YYCASE_
2091 }
2092
2093 yysize1 = yysize + strlen (yyformat);
63cb01d6
PE
2094 yysize_overflow |= yysize1 < yysize;
2095 yysize = yysize1;
2096
2097 if (!yysize_overflow)
2098 yymsg = (char *) YYMALLOC (yysize);
2099
2100 if (yymsg)
93a0df69 2101 {
63cb01d6
PE
2102 char *yyp = yymsg;
2103 int yyi = 0;
2b008529 2104 while ((*yyp = *yyformat))
93a0df69 2105 {
2b008529 2106 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
63cb01d6 2107 {
9e0876fb 2108 yyp += yytnamerr (yyp, yyarg[yyi++]);
2b008529 2109 yyformat += 2;
63cb01d6
PE
2110 }
2111 else
2112 {
2113 yyp++;
2b008529 2114 yyformat++;
63cb01d6 2115 }
93a0df69
PE
2116 }
2117 yyerror (]b4_lyyerror_args[yymsg);
a525b568 2118 YYFREE (yymsg);
01241d47 2119 }
93a0df69 2120 else
1a059451
PE
2121 {
2122 yyerror (]b4_lyyerror_args[YY_("syntax error"));
3e7a2cd9 2123 yyMemoryExhausted (yystackp);
1a059451 2124 }
01241d47
PH
2125 }
2126 else
93a0df69 2127#endif /* YYERROR_VERBOSE */
30757c8c 2128 yyerror (]b4_lyyerror_args[YY_("syntax error"));
01241d47
PH
2129 yynerrs += 1;
2130 }
2131}
2132
d6cff4dc
AD
2133/* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2134 yylval, and yylloc are the syntactic category, semantic value, and location
742e4900 2135 of the lookahead. */
12ce2df6 2136/*ARGSUSED*/ static void
d6cff4dc 2137yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
01241d47 2138{
1154cced
AD
2139 size_t yyk;
2140 int yyj;
01241d47 2141
3e7a2cd9 2142 if (yystackp->yyerrState == 3)
2a1fe6ed
AD
2143 /* We just shifted the error token and (perhaps) took some
2144 reductions. Skip tokens until we can proceed. */
3e7a2cd9 2145 while (YYID (yytrue))
2a1fe6ed 2146 {
3f001415
JD
2147 yySymbol yytoken;
2148 if (yychar == YYEOF)
3e7a2cd9 2149 yyFail (yystackp][]b4_lpure_args[, NULL);
3f001415 2150 if (yychar != YYEMPTY)
327afc7c 2151 {]b4_locations_if([[
e342c3be 2152 /* We throw away the lookahead, but the error range
9d9b8b70 2153 of the shifted error token must take it into account. */
3e7a2cd9 2154 yyGLRState *yys = yystackp->yytops.yystates[0];
63d72da7
PE
2155 yyGLRStackItem yyerror_range[3];
2156 yyerror_range[1].yystate.yyloc = yys->yyloc;
9ecafbbf 2157 yyerror_range[2].yystate.yyloc = yylloc;
401aace6 2158 YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2);]])[
3f001415 2159 yytoken = YYTRANSLATE (yychar);
e342c3be 2160 yydestruct ("Error: discarding",
327afc7c 2161 yytoken, &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
e342c3be 2162 }
2f4f028d 2163 YYDPRINTF ((stderr, "Reading a token: "));
01241d47 2164 yychar = YYLEX;
cf806753
PE
2165 if (yychar <= YYEOF)
2166 {
2167 yychar = yytoken = YYEOF;
2168 YYDPRINTF ((stderr, "Now at end of input.\n"));
2169 }
2170 else
2171 {
2172 yytoken = YYTRANSLATE (yychar);
2173 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2174 }
3e7a2cd9 2175 yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
f2b30bdf 2176 if (yypact_value_is_default (yyj))
25005f6a 2177 return;
3f001415 2178 yyj += yytoken;
34ec3579 2179 if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
01241d47 2180 {
3e7a2cd9 2181 if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
01241d47
PH
2182 return;
2183 }
f2b30bdf 2184 else if (! yytable_value_is_error (yytable[yyj]))
01241d47 2185 return;
2a1fe6ed 2186 }
fb8135fa 2187
2a1fe6ed 2188 /* Reduce to one stack. */
3e7a2cd9
PE
2189 for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
2190 if (yystackp->yytops.yystates[yyk] != NULL)
01241d47 2191 break;
3e7a2cd9
PE
2192 if (yyk >= yystackp->yytops.yysize)
2193 yyFail (yystackp][]b4_lpure_args[, NULL);
2194 for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
2195 yymarkStackDeleted (yystackp, yyk);
2196 yyremoveDeletes (yystackp);
2197 yycompressStack (yystackp);
01241d47 2198
9d9b8b70 2199 /* Now pop stack until we find a state that shifts the error token. */
3e7a2cd9
PE
2200 yystackp->yyerrState = 3;
2201 while (yystackp->yytops.yystates[0] != NULL)
01241d47 2202 {
3e7a2cd9 2203 yyGLRState *yys = yystackp->yytops.yystates[0];
7bd6c77e 2204 yyj = yypact[yys->yylrState];
f2b30bdf 2205 if (! yypact_value_is_default (yyj))
01241d47 2206 {
944ed9f4
PE
2207 yyj += YYTERROR;
2208 if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
2209 && yyisShiftAction (yytable[yyj]))
2210 {
e342c3be 2211 /* Shift the error token having adjusted its location. */
327afc7c 2212 YYLTYPE yyerrloc;]b4_locations_if([[
9ecafbbf 2213 yystackp->yyerror_range[2].yystate.yyloc = yylloc;
401aace6 2214 YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2);]])[
1576d44d 2215 YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
9ecafbbf 2216 &yylval, &yyerrloc);
3e7a2cd9 2217 yyglrShift (yystackp, 0, yytable[yyj],
9ecafbbf 2218 yys->yyposn, &yylval, &yyerrloc);
3e7a2cd9 2219 yys = yystackp->yytops.yystates[0];
944ed9f4
PE
2220 break;
2221 }
01241d47 2222 }
327afc7c 2223]b4_locations_if([[ yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
868d2d96
JD
2224 if (yys->yypred != NULL)
2225 yydestroyGLRState ("Error: popping", yys]b4_user_args[);
3e7a2cd9
PE
2226 yystackp->yytops.yystates[0] = yys->yypred;
2227 yystackp->yynextFree -= 1;
2228 yystackp->yyspaceLeft += 1;
01241d47 2229 }
3e7a2cd9
PE
2230 if (yystackp->yytops.yystates[0] == NULL)
2231 yyFail (yystackp][]b4_lpure_args[, NULL);
fb8135fa
AD
2232}
2233
01241d47
PH
2234#define YYCHK1(YYE) \
2235 do { \
2236 switch (YYE) { \
127287e9 2237 case yyok: \
01241d47
PH
2238 break; \
2239 case yyabort: \
6100a9aa 2240 goto yyabortlab; \
01241d47 2241 case yyaccept: \
6100a9aa 2242 goto yyacceptlab; \
01241d47
PH
2243 case yyerr: \
2244 goto yyuser_error; \
127287e9
PE
2245 default: \
2246 goto yybuglab; \
01241d47 2247 } \
12ce2df6 2248 } while (YYID (0))
01241d47 2249
0245f82d
AD
2250
2251/*----------.
2252| yyparse. |
2253`----------*/
2254
2255]b4_c_ansi_function_def([yyparse], [int], b4_parse_param)[
01241d47 2256{
6100a9aa 2257 int yyresult;
01241d47 2258 yyGLRStack yystack;
d6cff4dc 2259 yyGLRStack* const yystackp = &yystack;
01241d47 2260 size_t yyposn;
fb8135fa 2261
2f4f028d 2262 YYDPRINTF ((stderr, "Starting parse\n"));
2a1fe6ed 2263
bf70fa87 2264 yychar = YYEMPTY;
b8458aa5 2265 yylval = yyval_default;
327afc7c 2266]b4_locations_if([
ae93128c 2267#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
cd48d21d
AD
2268 yylloc.first_line = yylloc.last_line = ]b4_location_initial_line[;
2269 yylloc.first_column = yylloc.last_column = ]b4_location_initial_column[;
b8458aa5
AD
2270#endif
2271])
2272m4_ifdef([b4_initial_action], [
1c02d4bf
AD
2273m4_pushdef([b4_at_dollar], [yylloc])dnl
2274m4_pushdef([b4_dollar_dollar], [yylval])dnl
9d9b8b70 2275 /* User initialization code. */
8ec0a172 2276 b4_user_initial_action
b8458aa5 2277m4_popdef([b4_dollar_dollar])dnl
8ec0a172 2278m4_popdef([b4_at_dollar])])dnl
b8458aa5 2279[
d6cff4dc 2280 if (! yyinitGLRStack (yystackp, YYINITDEPTH))
1a059451 2281 goto yyexhaustedlab;
c89b4c03 2282 switch (YYSETJMP (yystack.yyexception_buffer))
6100a9aa 2283 {
c89b4c03 2284 case 0: break;
6100a9aa 2285 case 1: goto yyabortlab;
1a059451 2286 case 2: goto yyexhaustedlab;
c89b4c03 2287 default: goto yybuglab;
6100a9aa 2288 }
3e7a2cd9 2289 yyglrShift (&yystack, 0, 0, 0, &yylval, &yylloc);
01241d47
PH
2290 yyposn = 0;
2291
3e7a2cd9 2292 while (YYID (yytrue))
01241d47 2293 {
21964f43
AD
2294 /* For efficiency, we have two loops, the first of which is
2295 specialized to deterministic operation (single stack, no
2296 potential ambiguity). */
01241d47 2297 /* Standard mode */
3e7a2cd9 2298 while (YYID (yytrue))
01241d47
PH
2299 {
2300 yyRuleNum yyrule;
2301 int yyaction;
779e7ceb 2302 const short int* yyconflicts;
01241d47
PH
2303
2304 yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
69ce078b 2305 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
01241d47 2306 if (yystate == YYFINAL)
6100a9aa 2307 goto yyacceptlab;
fb8135fa 2308 if (yyisDefaultedState (yystate))
01241d47
PH
2309 {
2310 yyrule = yydefaultAction (yystate);
fb8135fa 2311 if (yyrule == 0)
01241d47 2312 {
327afc7c 2313]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
9ecafbbf 2314 yyreportSyntaxError (&yystack]b4_user_args[);
01241d47
PH
2315 goto yyuser_error;
2316 }
df9a1ba4 2317 YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_user_args[));
01241d47 2318 }
fb8135fa 2319 else
01241d47 2320 {
3f001415
JD
2321 yySymbol yytoken;
2322 if (yychar == YYEMPTY)
01241d47 2323 {
2f4f028d 2324 YYDPRINTF ((stderr, "Reading a token: "));
01241d47 2325 yychar = YYLEX;
cf806753
PE
2326 }
2327
2328 if (yychar <= YYEOF)
2329 {
2330 yychar = yytoken = YYEOF;
2331 YYDPRINTF ((stderr, "Now at end of input.\n"));
2332 }
2333 else
2334 {
01241d47 2335 yytoken = YYTRANSLATE (yychar);
9ecafbbf 2336 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
01241d47 2337 }
cf806753 2338
01241d47
PH
2339 yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
2340 if (*yyconflicts != 0)
2341 break;
fb8135fa 2342 if (yyisShiftAction (yyaction))
01241d47 2343 {
9ecafbbf 2344 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
868d2d96 2345 yychar = YYEMPTY;
01241d47 2346 yyposn += 1;
9ecafbbf 2347 yyglrShift (&yystack, 0, yyaction, yyposn, &yylval, &yylloc);
39912f52 2348 if (0 < yystack.yyerrState)
01241d47 2349 yystack.yyerrState -= 1;
01241d47
PH
2350 }
2351 else if (yyisErrorAction (yyaction))
2352 {
327afc7c 2353]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
9ecafbbf 2354 yyreportSyntaxError (&yystack]b4_user_args[);
01241d47
PH
2355 goto yyuser_error;
2356 }
2357 else
df9a1ba4 2358 YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_user_args[));
01241d47
PH
2359 }
2360 }
2361
3e7a2cd9 2362 while (YYID (yytrue))
01241d47 2363 {
69ce078b 2364 yySymbol yytoken_to_shift;
63cb01d6 2365 size_t yys;
69ce078b 2366
ae952af2 2367 for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
b7691f15 2368 yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
bf70fa87 2369
69ce078b
PE
2370 /* yyprocessOneStack returns one of three things:
2371
2372 - An error flag. If the caller is yyprocessOneStack, it
2373 immediately returns as well. When the caller is finally
2374 yyparse, it jumps to an error label via YYCHK1.
2375
2376 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2377 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2378 yyparse's following invocation of yyremoveDeletes will remove
2379 the stack.
2380
2381 - yyok, when ready to shift a token.
2382
2383 Except in the first case, yyparse will invoke yyremoveDeletes and
2384 then shift the next token onto all remaining stacks. This
2385 synchronization of the shift (that is, after all preceding
ae952af2 2386 reductions on all stacks) helps prevent double destructor calls
69ce078b
PE
2387 on yylval in the event of memory exhaustion. */
2388
ae952af2 2389 for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
9ecafbbf 2390 YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn]b4_lpure_args[));
69ce078b 2391 yyremoveDeletes (&yystack);
ae952af2
JD
2392 if (yystack.yytops.yysize == 0)
2393 {
2394 yyundeleteLastStack (&yystack);
2395 if (yystack.yytops.yysize == 0)
2396 yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
2397 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
2398 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
327afc7c 2399]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
ae952af2
JD
2400 yyreportSyntaxError (&yystack]b4_user_args[);
2401 goto yyuser_error;
2402 }
69ce078b
PE
2403
2404 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2405 a copy of yylval will already be on stack 0 in the event of a
3f001415 2406 failure in the following loop. Thus, yychar is set to YYEMPTY
69ce078b
PE
2407 before the loop to make sure the user destructor for yylval isn't
2408 called twice. */
3f001415 2409 yytoken_to_shift = YYTRANSLATE (yychar);
bf70fa87 2410 yychar = YYEMPTY;
01241d47 2411 yyposn += 1;
ae952af2 2412 for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
69ce078b
PE
2413 {
2414 int yyaction;
2415 const short int* yyconflicts;
2416 yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState;
2417 yygetLRActions (yystate, yytoken_to_shift, &yyaction,
2418 &yyconflicts);
2419 /* Note that yyconflicts were handled by yyprocessOneStack. */
2420 YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
9ecafbbf 2421 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc);
69ce078b 2422 yyglrShift (&yystack, yys, yyaction, yyposn,
9ecafbbf 2423 &yylval, &yylloc);
69ce078b
PE
2424 YYDPRINTF ((stderr, "Stack %lu now in state #%d\n",
2425 (unsigned long int) yys,
2426 yystack.yytops.yystates[yys]->yylrState));
2427 }
ae952af2
JD
2428
2429 if (yystack.yytops.yysize == 1)
01241d47 2430 {
2a8d363a 2431 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
2f4f028d 2432 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
01241d47
PH
2433 yycompressStack (&yystack);
2434 break;
2435 }
2436 }
2437 continue;
2438 yyuser_error:
d6cff4dc 2439 yyrecoverSyntaxError (&yystack]b4_user_args[);
01241d47
PH
2440 yyposn = yystack.yytops.yystates[0]->yyposn;
2441 }
6100a9aa
PE
2442
2443 yyacceptlab:
2444 yyresult = 0;
2445 goto yyreturn;
2446
127287e9
PE
2447 yybuglab:
2448 YYASSERT (yyfalse);
a85284cf 2449 goto yyabortlab;
127287e9 2450
6100a9aa
PE
2451 yyabortlab:
2452 yyresult = 1;
2453 goto yyreturn;
2454
1a059451
PE
2455 yyexhaustedlab:
2456 yyerror (]b4_lyyerror_args[YY_("memory exhausted"));
6100a9aa 2457 yyresult = 2;
a85284cf 2458 goto yyreturn;
6100a9aa
PE
2459
2460 yyreturn:
868d2d96 2461 if (yychar != YYEMPTY)
dd5f2af2 2462 yydestruct ("Cleanup: discarding lookahead",
3f001415 2463 YYTRANSLATE (yychar),
327afc7c 2464 &yylval]b4_locations_if([, &yylloc])[]b4_user_args[);
01241d47 2465
3922956a
PE
2466 /* If the stack is well-formed, pop the stack until it is empty,
2467 destroying its entries as we go. But free the stack regardless
2468 of whether it is well-formed. */
2469 if (yystack.yyitems)
2470 {
2471 yyGLRState** yystates = yystack.yytops.yystates;
2472 if (yystates)
69ce078b
PE
2473 {
2474 size_t yysize = yystack.yytops.yysize;
2475 size_t yyk;
2476 for (yyk = 0; yyk < yysize; yyk += 1)
2477 if (yystates[yyk])
2478 {
2479 while (yystates[yyk])
2480 {
2481 yyGLRState *yys = yystates[yyk];
327afc7c 2482]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
868d2d96
JD
2483)[ if (yys->yypred != NULL)
2484 yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
69ce078b
PE
2485 yystates[yyk] = yys->yypred;
2486 yystack.yynextFree -= 1;
2487 yystack.yyspaceLeft += 1;
2488 }
2489 break;
2490 }
2491 }
3922956a
PE
2492 yyfreeGLRStack (&yystack);
2493 }
258b75ca 2494
7b5cdcbd
JD
2495 /* Make sure YYID is used. */
2496 return YYID (yyresult);
01241d47
PH
2497}
2498
2499/* DEBUGGING ONLY */
8a86eef0 2500#if YYDEBUG
3e7a2cd9 2501static void yypstack (yyGLRStack* yystackp, size_t yyk)
135bc829 2502 __attribute__ ((__unused__));
3e7a2cd9 2503static void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__));
01241d47 2504
1154cced 2505static void
cf126971 2506yy_yypstack (yyGLRState* yys)
01241d47 2507{
cf126971 2508 if (yys->yypred)
01241d47 2509 {
cf126971 2510 yy_yypstack (yys->yypred);
8a86eef0 2511 YYFPRINTF (stderr, " -> ");
01241d47 2512 }
8a86eef0
JD
2513 YYFPRINTF (stderr, "%d@@%lu", yys->yylrState,
2514 (unsigned long int) yys->yyposn);
cf126971 2515}
01241d47 2516
cf126971
PE
2517static void
2518yypstates (yyGLRState* yyst)
2519{
fb8135fa 2520 if (yyst == NULL)
8a86eef0 2521 YYFPRINTF (stderr, "<null>");
fb8135fa 2522 else
01241d47 2523 yy_yypstack (yyst);
8a86eef0 2524 YYFPRINTF (stderr, "\n");
01241d47
PH
2525}
2526
1154cced 2527static void
3e7a2cd9 2528yypstack (yyGLRStack* yystackp, size_t yyk)
01241d47 2529{
3e7a2cd9 2530 yypstates (yystackp->yytops.yystates[yyk]);
01241d47
PH
2531}
2532
5cc16ecc 2533#define YYINDEX(YYX) \
3e7a2cd9 2534 ((YYX) == NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
01241d47
PH
2535
2536
1154cced 2537static void
3e7a2cd9 2538yypdumpstack (yyGLRStack* yystackp)
01241d47
PH
2539{
2540 yyGLRStackItem* yyp;
1154cced 2541 size_t yyi;
3e7a2cd9 2542 for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1)
01241d47 2543 {
8a86eef0
JD
2544 YYFPRINTF (stderr, "%3lu. ",
2545 (unsigned long int) (yyp - yystackp->yyitems));
f7c398aa 2546 if (*(yybool *) yyp)
01241d47 2547 {
8a86eef0
JD
2548 YYFPRINTF (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2549 yyp->yystate.yyresolved, yyp->yystate.yylrState,
2550 (unsigned long int) yyp->yystate.yyposn,
2551 (long int) YYINDEX (yyp->yystate.yypred));
fb8135fa 2552 if (! yyp->yystate.yyresolved)
8a86eef0
JD
2553 YYFPRINTF (stderr, ", firstVal: %ld",
2554 (long int) YYINDEX (yyp->yystate
2555 .yysemantics.yyfirstVal));
01241d47 2556 }
fb8135fa 2557 else
01241d47 2558 {
8a86eef0
JD
2559 YYFPRINTF (stderr, "Option. rule: %d, state: %ld, next: %ld",
2560 yyp->yyoption.yyrule - 1,
2561 (long int) YYINDEX (yyp->yyoption.yystate),
2562 (long int) YYINDEX (yyp->yyoption.yynext));
01241d47 2563 }
8a86eef0 2564 YYFPRINTF (stderr, "\n");
01241d47 2565 }
8a86eef0 2566 YYFPRINTF (stderr, "Tops:");
3e7a2cd9 2567 for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
8a86eef0
JD
2568 YYFPRINTF (stderr, "%lu: %ld; ", (unsigned long int) yyi,
2569 (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
2570 YYFPRINTF (stderr, "\n");
01241d47 2571}
417141dd 2572#endif
4524c55b 2573]b4_epilogue[]dnl
3f7ca628
JD
2574dnl
2575dnl glr.cc produces its own header.
2576dnl
2577m4_if(b4_skeleton, ["glr.c"],
2578[b4_defines_if(
a0d4650a 2579[@output(b4_spec_defines_file@)@
193d7c70 2580b4_copyright([Skeleton interface for Bison GLR parsers in C],
e141f4d4 2581 [2002-2010])
01241d47 2582
5059b5c8 2583b4_shared_declarations
01241d47 2584
0c650a20 2585b4_pure_if([],
6c88b51e 2586[[extern YYSTYPE ]b4_prefix[lval;]])
01241d47 2587
327afc7c 2588b4_locations_if([b4_pure_if([],
6c88b51e 2589[extern YYLTYPE ]b4_prefix[lloc;])
01241d47 2590])
4524c55b 2591])])[]dnl
08af01c2 2592m4_divert_pop(0)