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