]> git.saurik.com Git - bison.git/blame - data/glr.c
tests: be robust to platforms that support UTF-8 even with LC_ALL=C
[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([[
401aace6 811 YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen);
769a8ef9 812 yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
a85284cf 813]])[
25005f6a
PH
814 switch (yyn)
815 {
8ec0a172 816 ]b4_user_actions[
95f22ad2 817 default: break;
25005f6a 818 }
01241d47 819
25005f6a 820 return yyok;
01241d47
PH
821# undef yyerrok
822# undef YYABORT
823# undef YYACCEPT
824# undef YYERROR
825# undef YYBACKUP
826# undef yyclearin
827# undef YYRECOVERING
01241d47 828}
01241d47 829
56f8d560
AD
830
831static void
01241d47
PH
832yyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
833{
2a4647a3
PE
834 YYUSE (yy0);
835 YYUSE (yy1);
1154cced 836
fb8135fa 837 switch (yyn)
01241d47 838 {
3995c053 839]b4_mergers[
e2688cd9 840 default: break;
01241d47 841 }
01241d47 842}
a85284cf 843
e9690142 844 /* Bison grammar-table manipulation. */
01241d47 845
e3f12e08 846]b4_yydestruct_define[
7bd6c77e 847
42a6501d
PE
848/** Number of symbols composing the right hand side of rule #RULE. */
849static inline int
850yyrhsLength (yyRuleNum yyrule)
851{
852 return yyr2[yyrule];
853}
854
a4cf101a 855static void
4b367315 856yydestroyGLRState (char const *yymsg, yyGLRState *yys]b4_user_formals[)
a4cf101a
PE
857{
858 if (yys->yyresolved)
859 yydestruct (yymsg, yystos[yys->yylrState],
3e75a2c9 860 &yys->yysemantics.yysval]b4_locuser_args([&yys->yyloc])[);
a4cf101a
PE
861 else
862 {
5f108727 863#if ]b4_api_PREFIX[DEBUG
a4cf101a 864 if (yydebug)
e9690142
JD
865 {
866 if (yys->yysemantics.yyfirstVal)
3afe18fd 867 YYFPRINTF (stderr, "%s unresolved", yymsg);
e9690142 868 else
3afe18fd 869 YYFPRINTF (stderr, "%s incomplete", yymsg);
8d0b7cef 870 YY_SYMBOL_PRINT ("", yystos[yys->yylrState], YY_NULLPTR, &yys->yyloc);
e9690142 871 }
a4cf101a 872#endif
a4cf101a 873
42a6501d 874 if (yys->yysemantics.yyfirstVal)
e9690142
JD
875 {
876 yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
877 yyGLRState *yyrh;
878 int yyn;
879 for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
880 yyn > 0;
881 yyrh = yyrh->yypred, yyn -= 1)
882 yydestroyGLRState (yymsg, yyrh]b4_user_args[);
883 }
42a6501d 884 }
01241d47
PH
885}
886
ca2a6d15 887/** Left-hand-side symbol for rule #YYRULE. */
01241d47 888static inline yySymbol
fb8135fa 889yylhsNonterm (yyRuleNum yyrule)
01241d47
PH
890{
891 return yyr1[yyrule];
892}
893
c5178eb7
AD
894#define yypact_value_is_default(Yystate) \
895 ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[
944ed9f4 896
ca2a6d15 897/** True iff LR state YYSTATE has only a default reduction (regardless
9d9b8b70 898 * of token). */
f7c398aa 899static inline yybool
01241d47
PH
900yyisDefaultedState (yyStateNum yystate)
901{
f2b30bdf 902 return yypact_value_is_default (yypact[yystate]);
01241d47 903}
fb8135fa 904
ca2a6d15 905/** The default reduction for YYSTATE, assuming it has one. */
01241d47
PH
906static inline yyRuleNum
907yydefaultAction (yyStateNum yystate)
908{
909 return yydefact[yystate];
910}
911
c5178eb7
AD
912#define yytable_value_is_error(Yytable_value) \
913 ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[
944ed9f4 914
2a1fe6ed 915/** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
01241d47
PH
916 * Result R means
917 * R < 0: Reduce on rule -R.
918 * R = 0: Error.
fb8135fa 919 * R > 0: Shift to state R.
ca2a6d15
PH
920 * Set *YYCONFLICTS to a pointer into yyconfl to a 0-terminated list
921 * of conflicting reductions.
01241d47
PH
922 */
923static inline void
fb8135fa 924yygetLRActions (yyStateNum yystate, int yytoken,
e9690142 925 int* yyaction, const short int** yyconflicts)
01241d47
PH
926{
927 int yyindex = yypact[yystate] + yytoken;
f2b30bdf
JD
928 if (yypact_value_is_default (yypact[yystate])
929 || yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
01241d47
PH
930 {
931 *yyaction = -yydefact[yystate];
932 *yyconflicts = yyconfl;
933 }
f2b30bdf 934 else if (! yytable_value_is_error (yytable[yyindex]))
01241d47
PH
935 {
936 *yyaction = yytable[yyindex];
937 *yyconflicts = yyconfl + yyconflp[yyindex];
938 }
f50adbbd
AD
939 else
940 {
941 *yyaction = 0;
942 *yyconflicts = yyconfl + yyconflp[yyindex];
943 }
01241d47
PH
944}
945
edb2e905
AD
946/** Compute post-reduction state.
947 * \param yystate the current state
948 * \param yysym the nonterminal to push on the stack
949 */
01241d47 950static inline yyStateNum
edb2e905 951yyLRgotoState (yyStateNum yystate, yySymbol yysym)
01241d47 952{
edb2e905 953 int yyr = yypgoto[yysym - YYNTOKENS] + yystate;
34ec3579 954 if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
01241d47
PH
955 return yytable[yyr];
956 else
edb2e905 957 return yydefgoto[yysym - YYNTOKENS];
01241d47
PH
958}
959
f7c398aa 960static inline yybool
fb8135fa 961yyisShiftAction (int yyaction)
01241d47 962{
39912f52 963 return 0 < yyaction;
01241d47
PH
964}
965
f7c398aa 966static inline yybool
fb8135fa 967yyisErrorAction (int yyaction)
01241d47 968{
f50adbbd 969 return yyaction == 0;
01241d47
PH
970}
971
e9690142 972 /* GLRStates */
01241d47 973
ca2a6d15
PH
974/** Return a fresh GLRStackItem in YYSTACKP. The item is an LR state
975 * if YYISSTATE, and otherwise a semantic option. Callers should call
976 * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
977 * headroom. */
02998094
AD
978
979static inline yyGLRStackItem*
3e7a2cd9 980yynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState)
02998094 981{
3e7a2cd9
PE
982 yyGLRStackItem* yynewItem = yystackp->yynextFree;
983 yystackp->yyspaceLeft -= 1;
984 yystackp->yynextFree += 1;
02998094
AD
985 yynewItem->yystate.yyisState = yyisState;
986 return yynewItem;
987}
988
12f4614d 989/** Add a new semantic action that will execute the action for rule
ca2a6d15
PH
990 * YYRULE on the semantic values in YYRHS to the list of
991 * alternative actions for YYSTATE. Assumes that YYRHS comes from
992 * stack #YYK of *YYSTACKP. */
1154cced 993static void
bf70fa87 994yyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate,
e9690142 995 yyGLRState* yyrhs, yyRuleNum yyrule)
01241d47 996{
02998094 997 yySemanticOption* yynewOption =
3e7a2cd9 998 &yynewGLRStackItem (yystackp, yyfalse)->yyoption;
77482f27 999 YYASSERT (!yynewOption->yyisState);
8452c667 1000 yynewOption->yystate = yyrhs;
02998094 1001 yynewOption->yyrule = yyrule;
b7691f15 1002 if (yystackp->yytops.yylookaheadNeeds[yyk])
bf70fa87
JD
1003 {
1004 yynewOption->yyrawchar = yychar;
769a8ef9
AD
1005 yynewOption->yyval = yylval;]b4_locations_if([
1006 yynewOption->yyloc = yylloc;])[
bf70fa87
JD
1007 }
1008 else
1009 yynewOption->yyrawchar = YYEMPTY;
02998094
AD
1010 yynewOption->yynext = yystate->yysemantics.yyfirstVal;
1011 yystate->yysemantics.yyfirstVal = yynewOption;
1012
3e7a2cd9 1013 YY_RESERVE_GLRSTACK (yystackp);
01241d47
PH
1014}
1015
e9690142 1016 /* GLRStacks */
01241d47 1017
ca2a6d15 1018/** Initialize YYSET to a singleton set containing an empty stack. */
63cb01d6 1019static yybool
01241d47
PH
1020yyinitStateSet (yyGLRStateSet* yyset)
1021{
1022 yyset->yysize = 1;
1023 yyset->yycapacity = 16;
be16239b 1024 yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]);
63cb01d6
PE
1025 if (! yyset->yystates)
1026 return yyfalse;
8d0b7cef 1027 yyset->yystates[0] = YY_NULLPTR;
b7691f15
JD
1028 yyset->yylookaheadNeeds =
1029 (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]);
1030 if (! yyset->yylookaheadNeeds)
bf70fa87
JD
1031 {
1032 YYFREE (yyset->yystates);
1033 return yyfalse;
1034 }
63cb01d6 1035 return yytrue;
01241d47
PH
1036}
1037
fb8135fa 1038static void yyfreeStateSet (yyGLRStateSet* yyset)
01241d47 1039{
a525b568 1040 YYFREE (yyset->yystates);
b7691f15 1041 YYFREE (yyset->yylookaheadNeeds);
01241d47
PH
1042}
1043
ca2a6d15
PH
1044/** Initialize *YYSTACKP to a single empty stack, with total maximum
1045 * capacity for all stacks of YYSIZE. */
63cb01d6 1046static yybool
3e7a2cd9 1047yyinitGLRStack (yyGLRStack* yystackp, size_t yysize)
01241d47 1048{
3e7a2cd9 1049 yystackp->yyerrState = 0;
01241d47 1050 yynerrs = 0;
3e7a2cd9
PE
1051 yystackp->yyspaceLeft = yysize;
1052 yystackp->yyitems =
1053 (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]);
1054 if (!yystackp->yyitems)
3922956a 1055 return yyfalse;
3e7a2cd9 1056 yystackp->yynextFree = yystackp->yyitems;
8d0b7cef
AD
1057 yystackp->yysplitPoint = YY_NULLPTR;
1058 yystackp->yylastDeleted = YY_NULLPTR;
3e7a2cd9 1059 return yyinitStateSet (&yystackp->yytops);
01241d47
PH
1060}
1061
02998094
AD
1062
1063#if YYSTACKEXPANDABLE
1064# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
01241d47
PH
1065 &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1066
ca2a6d15 1067/** If *YYSTACKP is expandable, extend it. WARNING: Pointers into the
01241d47
PH
1068 stack from outside should be considered invalid after this call.
1069 We always expand when there are 1 or fewer items left AFTER an
1070 allocation, so that we can avoid having external pointers exist
9d9b8b70 1071 across an allocation. */
01241d47 1072static void
3e7a2cd9 1073yyexpandGLRStack (yyGLRStack* yystackp)
01241d47 1074{
63cb01d6 1075 yyGLRStackItem* yynewItems;
01241d47 1076 yyGLRStackItem* yyp0, *yyp1;
aebb55eb 1077 size_t yynewSize;
01241d47 1078 size_t yyn;
aebb55eb 1079 size_t yysize = yystackp->yynextFree - yystackp->yyitems;
18d9185c 1080 if (YYMAXDEPTH - YYHEADROOM < yysize)
3e7a2cd9 1081 yyMemoryExhausted (yystackp);
01241d47 1082 yynewSize = 2*yysize;
39912f52 1083 if (YYMAXDEPTH < yynewSize)
01241d47 1084 yynewSize = YYMAXDEPTH;
63cb01d6
PE
1085 yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]);
1086 if (! yynewItems)
3e7a2cd9
PE
1087 yyMemoryExhausted (yystackp);
1088 for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize;
39912f52 1089 0 < yyn;
fb8135fa 1090 yyn -= 1, yyp0 += 1, yyp1 += 1)
01241d47
PH
1091 {
1092 *yyp1 = *yyp0;
f7c398aa 1093 if (*(yybool *) yyp0)
e9690142
JD
1094 {
1095 yyGLRState* yys0 = &yyp0->yystate;
1096 yyGLRState* yys1 = &yyp1->yystate;
8d0b7cef 1097 if (yys0->yypred != YY_NULLPTR)
e9690142
JD
1098 yys1->yypred =
1099 YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
8d0b7cef 1100 if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != YY_NULLPTR)
e9690142 1101 yys1->yysemantics.yyfirstVal =
aebb55eb 1102 YYRELOC (yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
e9690142 1103 }
fb8135fa 1104 else
e9690142
JD
1105 {
1106 yySemanticOption* yyv0 = &yyp0->yyoption;
1107 yySemanticOption* yyv1 = &yyp1->yyoption;
8d0b7cef 1108 if (yyv0->yystate != YY_NULLPTR)
e9690142 1109 yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
8d0b7cef 1110 if (yyv0->yynext != YY_NULLPTR)
e9690142
JD
1111 yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
1112 }
01241d47 1113 }
8d0b7cef 1114 if (yystackp->yysplitPoint != YY_NULLPTR)
3e7a2cd9 1115 yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems,
9e87ff54 1116 yystackp->yysplitPoint, yystate);
3e7a2cd9
PE
1117
1118 for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1)
8d0b7cef 1119 if (yystackp->yytops.yystates[yyn] != YY_NULLPTR)
3e7a2cd9 1120 yystackp->yytops.yystates[yyn] =
e9690142
JD
1121 YYRELOC (yystackp->yyitems, yynewItems,
1122 yystackp->yytops.yystates[yyn], yystate);
3e7a2cd9
PE
1123 YYFREE (yystackp->yyitems);
1124 yystackp->yyitems = yynewItems;
1125 yystackp->yynextFree = yynewItems + yysize;
1126 yystackp->yyspaceLeft = yynewSize - yysize;
01241d47 1127}
02998094 1128#endif
01241d47
PH
1129
1130static void
3e7a2cd9 1131yyfreeGLRStack (yyGLRStack* yystackp)
01241d47 1132{
3e7a2cd9
PE
1133 YYFREE (yystackp->yyitems);
1134 yyfreeStateSet (&yystackp->yytops);
01241d47
PH
1135}
1136
ca2a6d15
PH
1137/** Assuming that YYS is a GLRState somewhere on *YYSTACKP, update the
1138 * splitpoint of *YYSTACKP, if needed, so that it is at least as deep as
1139 * YYS. */
01241d47 1140static inline void
3e7a2cd9 1141yyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys)
01241d47 1142{
8d0b7cef 1143 if (yystackp->yysplitPoint != YY_NULLPTR && yystackp->yysplitPoint > yys)
3e7a2cd9 1144 yystackp->yysplitPoint = yys;
01241d47
PH
1145}
1146
ca2a6d15 1147/** Invalidate stack #YYK in *YYSTACKP. */
01241d47 1148static inline void
3e7a2cd9 1149yymarkStackDeleted (yyGLRStack* yystackp, size_t yyk)
01241d47 1150{
8d0b7cef 1151 if (yystackp->yytops.yystates[yyk] != YY_NULLPTR)
3e7a2cd9 1152 yystackp->yylastDeleted = yystackp->yytops.yystates[yyk];
8d0b7cef 1153 yystackp->yytops.yystates[yyk] = YY_NULLPTR;
01241d47
PH
1154}
1155
ca2a6d15
PH
1156/** Undelete the last stack in *YYSTACKP that was marked as deleted. Can
1157 only be done once after a deletion, and only when all other stacks have
9d9b8b70 1158 been deleted. */
01241d47 1159static void
3e7a2cd9 1160yyundeleteLastStack (yyGLRStack* yystackp)
01241d47 1161{
8d0b7cef 1162 if (yystackp->yylastDeleted == YY_NULLPTR || yystackp->yytops.yysize != 0)
01241d47 1163 return;
3e7a2cd9
PE
1164 yystackp->yytops.yystates[0] = yystackp->yylastDeleted;
1165 yystackp->yytops.yysize = 1;
2f4f028d 1166 YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
8d0b7cef 1167 yystackp->yylastDeleted = YY_NULLPTR;
01241d47
PH
1168}
1169
1170static inline void
3e7a2cd9 1171yyremoveDeletes (yyGLRStack* yystackp)
01241d47 1172{
1154cced 1173 size_t yyi, yyj;
01241d47 1174 yyi = yyj = 0;
3e7a2cd9 1175 while (yyj < yystackp->yytops.yysize)
01241d47 1176 {
8d0b7cef 1177 if (yystackp->yytops.yystates[yyi] == YY_NULLPTR)
e9690142
JD
1178 {
1179 if (yyi == yyj)
1180 {
1181 YYDPRINTF ((stderr, "Removing dead stacks.\n"));
1182 }
1183 yystackp->yytops.yysize -= 1;
1184 }
fb8135fa 1185 else
e9690142
JD
1186 {
1187 yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi];
1188 /* In the current implementation, it's unnecessary to copy
1189 yystackp->yytops.yylookaheadNeeds[yyi] since, after
1190 yyremoveDeletes returns, the parser immediately either enters
1191 deterministic operation or shifts a token. However, it doesn't
1192 hurt, and the code might evolve to need it. */
1193 yystackp->yytops.yylookaheadNeeds[yyj] =
1194 yystackp->yytops.yylookaheadNeeds[yyi];
1195 if (yyj != yyi)
1196 {
1197 YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
1198 (unsigned long int) yyi, (unsigned long int) yyj));
1199 }
1200 yyj += 1;
1201 }
01241d47
PH
1202 yyi += 1;
1203 }
1204}
1205
ca2a6d15
PH
1206/** Shift to a new state on stack #YYK of *YYSTACKP, corresponding to LR
1207 * state YYLRSTATE, at input position YYPOSN, with (resolved) semantic
1208 * value *YYVALP and source location *YYLOCP. */
01241d47 1209static inline void
3e7a2cd9 1210yyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
e9690142 1211 size_t yyposn,
3e75a2c9 1212 YYSTYPE* yyvalp]b4_locations_if([, YYLTYPE* yylocp])[)
01241d47 1213{
3e7a2cd9 1214 yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
01241d47 1215
02998094
AD
1216 yynewState->yylrState = yylrState;
1217 yynewState->yyposn = yyposn;
1218 yynewState->yyresolved = yytrue;
3e7a2cd9 1219 yynewState->yypred = yystackp->yytops.yystates[yyk];
769a8ef9
AD
1220 yynewState->yysemantics.yysval = *yyvalp;]b4_locations_if([
1221 yynewState->yyloc = *yylocp;])[
3e7a2cd9 1222 yystackp->yytops.yystates[yyk] = yynewState;
02998094 1223
3e7a2cd9 1224 YY_RESERVE_GLRSTACK (yystackp);
01241d47
PH
1225}
1226
ca2a6d15 1227/** Shift stack #YYK of *YYSTACKP, to a new state corresponding to LR
c4749565 1228 * state YYLRSTATE, at input position YYPOSN, with the (unresolved)
9d9b8b70 1229 * semantic value of YYRHS under the action for YYRULE. */
01241d47 1230static inline void
3e7a2cd9 1231yyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
e9690142 1232 size_t yyposn, yyGLRState* yyrhs, yyRuleNum yyrule)
01241d47 1233{
3e7a2cd9 1234 yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
77482f27 1235 YYASSERT (yynewState->yyisState);
02998094
AD
1236
1237 yynewState->yylrState = yylrState;
1238 yynewState->yyposn = yyposn;
1239 yynewState->yyresolved = yyfalse;
3e7a2cd9 1240 yynewState->yypred = yystackp->yytops.yystates[yyk];
8d0b7cef 1241 yynewState->yysemantics.yyfirstVal = YY_NULLPTR;
3e7a2cd9 1242 yystackp->yytops.yystates[yyk] = yynewState;
02998094 1243
9d9b8b70 1244 /* Invokes YY_RESERVE_GLRSTACK. */
8452c667 1245 yyaddDeferredAction (yystackp, yyk, yynewState, yyrhs, yyrule);
01241d47
PH
1246}
1247
ccdc1577 1248#if !]b4_api_PREFIX[DEBUG
ca2a6d15
PH
1249# define YY_REDUCE_PRINT(Args)
1250#else
e9690142
JD
1251# define YY_REDUCE_PRINT(Args) \
1252do { \
1253 if (yydebug) \
1254 yy_reduce_print Args; \
56f8d560 1255} while (0)
ca2a6d15
PH
1256
1257/*----------------------------------------------------------------------.
1258| Report that stack #YYK of *YYSTACKP is going to be reduced by YYRULE. |
1259`----------------------------------------------------------------------*/
1260
56f8d560 1261static inline void
f86a7807
AD
1262yy_reduce_print (int yynormal, yyGLRStackItem* yyvsp, size_t yyk,
1263 yyRuleNum yyrule]b4_user_formals[)
ca2a6d15 1264{
d467f443
PH
1265 int yynrhs = yyrhsLength (yyrule);]b4_locations_if([
1266 int yylow = 1;])[
ca2a6d15 1267 int yyi;
beadb220 1268 YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n",
e9690142
JD
1269 (unsigned long int) yyk, yyrule - 1,
1270 (unsigned long int) yyrline[yyrule]);
ca2a6d15 1271 if (! yynormal)
d467f443 1272 yyfillin (yyvsp, 1, -yynrhs);
ca2a6d15
PH
1273 /* The symbols being reduced. */
1274 for (yyi = 0; yyi < yynrhs; yyi++)
1275 {
1276 YYFPRINTF (stderr, " $%d = ", yyi + 1);
1277 yy_symbol_print (stderr,
e9690142
JD
1278 yystos[yyvsp[yyi - yynrhs + 1].yystate.yylrState],
1279 &yyvsp[yyi - yynrhs + 1].yystate.yysemantics.yysval
1280 ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
1281 b4_user_args[);
d467f443 1282 if (!yyvsp[yyi - yynrhs + 1].yystate.yyresolved)
ca2a6d15
PH
1283 YYFPRINTF (stderr, " (unresolved)");
1284 YYFPRINTF (stderr, "\n");
1285 }
1286}
1287#endif
1288
1289/** Pop the symbols consumed by reduction #YYRULE from the top of stack
1290 * #YYK of *YYSTACKP, and perform the appropriate semantic action on their
fb8135fa 1291 * semantic values. Assumes that all ambiguities in semantic values
ca2a6d15
PH
1292 * have been previously resolved. Set *YYVALP to the resulting value,
1293 * and *YYLOCP to the computed location (if any). Return value is as
9d9b8b70 1294 * for userAction. */
ff032592 1295static inline YYRESULTTAG
3e7a2cd9 1296yydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
3e75a2c9 1297 YYSTYPE* yyvalp]b4_locuser_formals[)
01241d47
PH
1298{
1299 int yynrhs = yyrhsLength (yyrule);
1300
8d0b7cef 1301 if (yystackp->yysplitPoint == YY_NULLPTR)
01241d47 1302 {
9d9b8b70 1303 /* Standard special case: single stack. */
8452c667 1304 yyGLRStackItem* yyrhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
64c4fd52 1305 YYASSERT (yyk == 0);
3e7a2cd9
PE
1306 yystackp->yynextFree -= yynrhs;
1307 yystackp->yyspaceLeft += yynrhs;
1308 yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
ca2a6d15 1309 YY_REDUCE_PRINT ((1, yyrhs, yyk, yyrule]b4_user_args[));
3e75a2c9
AD
1310 return yyuserAction (yyrule, yynrhs, yyrhs, yystackp,
1311 yyvalp]b4_locuser_args[);
01241d47 1312 }
fb8135fa 1313 else
01241d47
PH
1314 {
1315 int yyi;
1316 yyGLRState* yys;
25005f6a 1317 yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
5cc16ecc 1318 yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
e9690142 1319 = yystackp->yytops.yystates[yyk];]b4_locations_if([[
44e7ead1 1320 if (yynrhs == 0)
e9690142
JD
1321 /* Set default location. */
1322 yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
f868dc04 1323 for (yyi = 0; yyi < yynrhs; yyi += 1)
e9690142
JD
1324 {
1325 yys = yys->yypred;
1326 YYASSERT (yys);
1327 }
3e7a2cd9
PE
1328 yyupdateSplit (yystackp, yys);
1329 yystackp->yytops.yystates[yyk] = yys;
ca2a6d15 1330 YY_REDUCE_PRINT ((0, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yyk, yyrule]b4_user_args[));
25005f6a 1331 return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
3e75a2c9 1332 yystackp, yyvalp]b4_locuser_args[);
01241d47
PH
1333 }
1334}
1335
ca2a6d15 1336/** Pop items off stack #YYK of *YYSTACKP according to grammar rule YYRULE,
01241d47 1337 * and push back on the resulting nonterminal symbol. Perform the
ca2a6d15
PH
1338 * semantic action associated with YYRULE and store its value with the
1339 * newly pushed state, if YYFORCEEVAL or if *YYSTACKP is currently
01241d47
PH
1340 * unambiguous. Otherwise, store the deferred semantic action with
1341 * the new state. If the new state would have an identical input
1342 * position, LR state, and predecessor to an existing state on the stack,
ca2a6d15
PH
1343 * it is identified with that existing state, eliminating stack #YYK from
1344 * *YYSTACKP. In this case, the semantic value is
fb8135fa 1345 * added to the options for the existing state's semantic value.
01241d47
PH
1346 */
1347static inline YYRESULTTAG
3e7a2cd9 1348yyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
e9690142 1349 yybool yyforceEval]b4_user_formals[)
01241d47 1350{
3e7a2cd9 1351 size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
01241d47 1352
8d0b7cef 1353 if (yyforceEval || yystackp->yysplitPoint == YY_NULLPTR)
01241d47 1354 {
5a6e85fb
AD
1355 YYSTYPE yysval;]b4_locations_if([[
1356 YYLTYPE yyloc;]])[
fb8135fa 1357
5a6e85fb 1358 YYRESULTTAG yyflag = yydoAction (yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[);
8d0b7cef 1359 if (yyflag == yyerr && yystackp->yysplitPoint != YY_NULLPTR)
ca2a6d15 1360 {
e9690142
JD
1361 YYDPRINTF ((stderr, "Parse on stack %lu rejected by rule #%d.\n",
1362 (unsigned long int) yyk, yyrule - 1));
ca2a6d15
PH
1363 }
1364 if (yyflag != yyok)
c49784f5 1365 return yyflag;
62b08cfc 1366 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
3e7a2cd9 1367 yyglrShift (yystackp, yyk,
e9690142
JD
1368 yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
1369 yylhsNonterm (yyrule)),
3e75a2c9 1370 yyposn, &yysval]b4_locations_if([, &yyloc])[);
01241d47 1371 }
fb8135fa 1372 else
01241d47 1373 {
1154cced
AD
1374 size_t yyi;
1375 int yyn;
3e7a2cd9 1376 yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk];
01241d47
PH
1377 yyStateNum yynewLRState;
1378
3e7a2cd9 1379 for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule);
e9690142
JD
1380 0 < yyn; yyn -= 1)
1381 {
1382 yys = yys->yypred;
1383 YYASSERT (yys);
1384 }
3e7a2cd9 1385 yyupdateSplit (yystackp, yys);
01241d47 1386 yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
fb8135fa 1387 YYDPRINTF ((stderr,
f86a7807
AD
1388 "Reduced stack %lu by rule #%d; action deferred. "
1389 "Now in state %d.\n",
e9690142 1390 (unsigned long int) yyk, yyrule - 1, yynewLRState));
3e7a2cd9 1391 for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
8d0b7cef 1392 if (yyi != yyk && yystackp->yytops.yystates[yyi] != YY_NULLPTR)
e9690142 1393 {
aebb55eb
AD
1394 yyGLRState *yysplit = yystackp->yysplitPoint;
1395 yyGLRState *yyp = yystackp->yytops.yystates[yyi];
e9690142
JD
1396 while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
1397 {
1398 if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
1399 {
1400 yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule);
1401 yymarkStackDeleted (yystackp, yyk);
1402 YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
1403 (unsigned long int) yyk,
1404 (unsigned long int) yyi));
1405 return yyok;
1406 }
1407 yyp = yyp->yypred;
1408 }
1409 }
3e7a2cd9
PE
1410 yystackp->yytops.yystates[yyk] = yys;
1411 yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule);
fb8135fa 1412 }
ff032592 1413 return yyok;
01241d47
PH
1414}
1415
63cb01d6 1416static size_t
3e7a2cd9 1417yysplitStack (yyGLRStack* yystackp, size_t yyk)
01241d47 1418{
8d0b7cef 1419 if (yystackp->yysplitPoint == YY_NULLPTR)
01241d47 1420 {
64c4fd52 1421 YYASSERT (yyk == 0);
3e7a2cd9 1422 yystackp->yysplitPoint = yystackp->yytops.yystates[yyk];
01241d47 1423 }
3e7a2cd9 1424 if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity)
01241d47 1425 {
63cb01d6 1426 yyGLRState** yynewStates;
b7691f15 1427 yybool* yynewLookaheadNeeds;
ddee1b06 1428
8d0b7cef 1429 yynewStates = YY_NULLPTR;
c66dfadd 1430
ddee1b06 1431 if (yystackp->yytops.yycapacity
e9690142
JD
1432 > (YYSIZEMAX / (2 * sizeof yynewStates[0])))
1433 yyMemoryExhausted (yystackp);
ddee1b06
PH
1434 yystackp->yytops.yycapacity *= 2;
1435
1436 yynewStates =
e9690142
JD
1437 (yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
1438 (yystackp->yytops.yycapacity
1439 * sizeof yynewStates[0]));
8d0b7cef 1440 if (yynewStates == YY_NULLPTR)
e9690142 1441 yyMemoryExhausted (yystackp);
3e7a2cd9 1442 yystackp->yytops.yystates = yynewStates;
ddee1b06 1443
b7691f15 1444 yynewLookaheadNeeds =
e9690142
JD
1445 (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds,
1446 (yystackp->yytops.yycapacity
1447 * sizeof yynewLookaheadNeeds[0]));
8d0b7cef 1448 if (yynewLookaheadNeeds == YY_NULLPTR)
e9690142 1449 yyMemoryExhausted (yystackp);
b7691f15 1450 yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds;
01241d47 1451 }
3e7a2cd9
PE
1452 yystackp->yytops.yystates[yystackp->yytops.yysize]
1453 = yystackp->yytops.yystates[yyk];
b7691f15
JD
1454 yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize]
1455 = yystackp->yytops.yylookaheadNeeds[yyk];
3e7a2cd9
PE
1456 yystackp->yytops.yysize += 1;
1457 return yystackp->yytops.yysize-1;
01241d47
PH
1458}
1459
ca2a6d15 1460/** True iff YYY0 and YYY1 represent identical options at the top level.
01241d47 1461 * That is, they represent the same rule applied to RHS symbols
9d9b8b70 1462 * that produce the same terminal symbols. */
f7c398aa 1463static yybool
01241d47
PH
1464yyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1)
1465{
fb8135fa 1466 if (yyy0->yyrule == yyy1->yyrule)
01241d47
PH
1467 {
1468 yyGLRState *yys0, *yys1;
1469 int yyn;
fb8135fa 1470 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
e9690142
JD
1471 yyn = yyrhsLength (yyy0->yyrule);
1472 yyn > 0;
1473 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
1474 if (yys0->yyposn != yys1->yyposn)
1475 return yyfalse;
01241d47
PH
1476 return yytrue;
1477 }
1478 else
1479 return yyfalse;
1480}
1481
ca2a6d15
PH
1482/** Assuming identicalOptions (YYY0,YYY1), destructively merge the
1483 * alternative semantic values for the RHS-symbols of YYY1 and YYY0. */
01241d47
PH
1484static void
1485yymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1)
1486{
1487 yyGLRState *yys0, *yys1;
1488 int yyn;
fb8135fa 1489 for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
01241d47
PH
1490 yyn = yyrhsLength (yyy0->yyrule);
1491 yyn > 0;
1492 yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
5e6f62f2
PH
1493 {
1494 if (yys0 == yys1)
e9690142 1495 break;
010f91c3 1496 else if (yys0->yyresolved)
e9690142
JD
1497 {
1498 yys1->yyresolved = yytrue;
1499 yys1->yysemantics.yysval = yys0->yysemantics.yysval;
1500 }
5e6f62f2 1501 else if (yys1->yyresolved)
e9690142
JD
1502 {
1503 yys0->yyresolved = yytrue;
1504 yys0->yysemantics.yysval = yys1->yysemantics.yysval;
1505 }
010f91c3 1506 else
e9690142 1507 {
aebb55eb
AD
1508 yySemanticOption** yyz0p = &yys0->yysemantics.yyfirstVal;
1509 yySemanticOption* yyz1 = yys1->yysemantics.yyfirstVal;
56f8d560 1510 while (yytrue)
e9690142 1511 {
8d0b7cef 1512 if (yyz1 == *yyz0p || yyz1 == YY_NULLPTR)
e9690142 1513 break;
8d0b7cef 1514 else if (*yyz0p == YY_NULLPTR)
e9690142
JD
1515 {
1516 *yyz0p = yyz1;
1517 break;
1518 }
1519 else if (*yyz0p < yyz1)
1520 {
1521 yySemanticOption* yyz = *yyz0p;
1522 *yyz0p = yyz1;
1523 yyz1 = yyz1->yynext;
1524 (*yyz0p)->yynext = yyz;
1525 }
1526 yyz0p = &(*yyz0p)->yynext;
1527 }
1528 yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal;
1529 }
5e6f62f2 1530 }
01241d47
PH
1531}
1532
1533/** Y0 and Y1 represent two possible actions to take in a given
1534 * parsing state; return 0 if no combination is possible,
9d9b8b70 1535 * 1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred. */
01241d47 1536static int
1154cced 1537yypreference (yySemanticOption* y0, yySemanticOption* y1)
01241d47 1538{
1154cced
AD
1539 yyRuleNum r0 = y0->yyrule, r1 = y1->yyrule;
1540 int p0 = yydprec[r0], p1 = yydprec[r1];
01241d47 1541
1154cced 1542 if (p0 == p1)
01241d47 1543 {
1154cced 1544 if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1])
e9690142 1545 return 0;
01241d47 1546 else
e9690142 1547 return 1;
01241d47 1548 }
1154cced 1549 if (p0 == 0 || p1 == 0)
01241d47 1550 return 0;
1154cced 1551 if (p0 < p1)
01241d47 1552 return 3;
39912f52 1553 if (p1 < p0)
01241d47
PH
1554 return 2;
1555 return 0;
1556}
1557
d659304d 1558static YYRESULTTAG yyresolveValue (yyGLRState* yys,
e9690142 1559 yyGLRStack* yystackp]b4_user_formals[);
520181ab 1560
01241d47 1561
ca2a6d15
PH
1562/** Resolve the previous YYN states starting at and including state YYS
1563 * on *YYSTACKP. If result != yyok, some states may have been left
1564 * unresolved possibly with empty semantic option chains. Regardless
1565 * of whether result = yyok, each state has been left with consistent
1566 * data so that yydestroyGLRState can be invoked if necessary. */
01241d47 1567static YYRESULTTAG
3e7a2cd9 1568yyresolveStates (yyGLRState* yys, int yyn,
e9690142 1569 yyGLRStack* yystackp]b4_user_formals[)
01241d47 1570{
39912f52 1571 if (0 < yyn)
01241d47 1572 {
64c4fd52 1573 YYASSERT (yys->yypred);
d659304d 1574 YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp]b4_user_args[));
fb8135fa 1575 if (! yys->yyresolved)
e9690142 1576 YYCHK (yyresolveValue (yys, yystackp]b4_user_args[));
01241d47
PH
1577 }
1578 return yyok;
1579}
1580
ca2a6d15
PH
1581/** Resolve the states for the RHS of YYOPT on *YYSTACKP, perform its
1582 * user action, and return the semantic value and location in *YYVALP
1583 * and *YYLOCP. Regardless of whether result = yyok, all RHS states
1584 * have been destroyed (assuming the user action destroys all RHS
520181ab 1585 * semantic values if invoked). */
01241d47 1586static YYRESULTTAG
3e7a2cd9 1587yyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
3e75a2c9 1588 YYSTYPE* yyvalp]b4_locuser_formals[)
01241d47 1589{
25005f6a 1590 yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
aebb55eb
AD
1591 int yynrhs = yyrhsLength (yyopt->yyrule);
1592 YYRESULTTAG yyflag =
1593 yyresolveStates (yyopt->yystate, yynrhs, yystackp]b4_user_args[);
520181ab
JD
1594 if (yyflag != yyok)
1595 {
1596 yyGLRState *yys;
1597 for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1)
e9690142 1598 yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
520181ab
JD
1599 return yyflag;
1600 }
1601
327afc7c 1602 yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate;]b4_locations_if([[
44e7ead1 1603 if (yynrhs == 0)
9d9b8b70 1604 /* Set default location. */
44e7ead1 1605 yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc;]])[
aebb55eb
AD
1606 {
1607 int yychar_current = yychar;
1608 YYSTYPE yylval_current = yylval;]b4_locations_if([
1609 YYLTYPE yylloc_current = yylloc;])[
1610 yychar = yyopt->yyrawchar;
1611 yylval = yyopt->yyval;]b4_locations_if([
1612 yylloc = yyopt->yyloc;])[
1613 yyflag = yyuserAction (yyopt->yyrule, yynrhs,
e9690142 1614 yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
aebb55eb
AD
1615 yystackp, yyvalp]b4_locuser_args[);
1616 yychar = yychar_current;
1617 yylval = yylval_current;]b4_locations_if([
1618 yylloc = yylloc_current;])[
1619 }
520181ab 1620 return yyflag;
01241d47
PH
1621}
1622
5f108727 1623#if ]b4_api_PREFIX[DEBUG
e7cb57c0
AD
1624static void
1625yyreportTree (yySemanticOption* yyx, int yyindent)
01241d47
PH
1626{
1627 int yynrhs = yyrhsLength (yyx->yyrule);
1628 int yyi;
1629 yyGLRState* yys;
9138c575 1630 yyGLRState* yystates[1 + YYMAXRHS];
782a05f9 1631 yyGLRState yyleftmost_state;
01241d47 1632
39912f52 1633 for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
01241d47 1634 yystates[yyi] = yys;
8d0b7cef 1635 if (yys == YY_NULLPTR)
782a05f9
PE
1636 {
1637 yyleftmost_state.yyposn = 0;
1638 yystates[0] = &yyleftmost_state;
1639 }
01241d47
PH
1640 else
1641 yystates[0] = yys;
1642
39912f52 1643 if (yyx->yystate->yyposn < yys->yyposn + 1)
01241d47 1644 YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
e9690142
JD
1645 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
1646 yyx->yyrule - 1);
01241d47 1647 else
08fc98e5 1648 YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
e9690142
JD
1649 yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
1650 yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1),
1651 (unsigned long int) yyx->yystate->yyposn);
fb8135fa 1652 for (yyi = 1; yyi <= yynrhs; yyi += 1)
01241d47 1653 {
fb8135fa 1654 if (yystates[yyi]->yyresolved)
e9690142
JD
1655 {
1656 if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
1657 YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
a6b2f4fc 1658 yytokenName (yystos[yystates[yyi]->yylrState]));
e9690142
JD
1659 else
1660 YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
a6b2f4fc 1661 yytokenName (yystos[yystates[yyi]->yylrState]),
e9690142
JD
1662 (unsigned long int) (yystates[yyi-1]->yyposn + 1),
1663 (unsigned long int) yystates[yyi]->yyposn);
1664 }
fb8135fa 1665 else
e9690142 1666 yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
01241d47
PH
1667 }
1668}
fb8135fa 1669#endif
01241d47 1670
56f8d560 1671static YYRESULTTAG
35ee866a 1672yyreportAmbiguity (yySemanticOption* yyx0,
e9690142 1673 yySemanticOption* yyx1]b4_pure_formals[)
01241d47 1674{
2a4647a3
PE
1675 YYUSE (yyx0);
1676 YYUSE (yyx1);
1154cced 1677
5f108727 1678#if ]b4_api_PREFIX[DEBUG
2f4f028d
PE
1679 YYFPRINTF (stderr, "Ambiguity detected.\n");
1680 YYFPRINTF (stderr, "Option 1,\n");
01241d47 1681 yyreportTree (yyx0, 2);
2f4f028d 1682 YYFPRINTF (stderr, "\nOption 2,\n");
01241d47 1683 yyreportTree (yyx1, 2);
2f4f028d 1684 YYFPRINTF (stderr, "\n");
01241d47 1685#endif
35ee866a
JD
1686
1687 yyerror (]b4_yyerror_args[YY_("syntax is ambiguous"));
1688 return yyabort;
67b8cfbd 1689}]b4_locations_if([[
01241d47 1690
ca2a6d15
PH
1691/** Resolve the locations for each of the YYN1 states in *YYSTACKP,
1692 * ending at YYS1. Has no effect on previously resolved states.
1693 * The first semantic option of a state is always chosen. */
8710fc41 1694static void
6d05403d 1695yyresolveLocations (yyGLRState* yys1, int yyn1,
e9690142 1696 yyGLRStack *yystackp]b4_user_formals[)
8710fc41 1697{
6d05403d 1698 if (0 < yyn1)
8710fc41 1699 {
6d05403d
PE
1700 yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp]b4_user_args[);
1701 if (!yys1->yyresolved)
e9690142 1702 {
e9690142
JD
1703 yyGLRStackItem yyrhsloc[1 + YYMAXRHS];
1704 int yynrhs;
aebb55eb 1705 yySemanticOption *yyoption = yys1->yysemantics.yyfirstVal;
8d0b7cef 1706 YYASSERT (yyoption != YY_NULLPTR);
e9690142
JD
1707 yynrhs = yyrhsLength (yyoption->yyrule);
1708 if (yynrhs > 0)
1709 {
1710 yyGLRState *yys;
1711 int yyn;
1712 yyresolveLocations (yyoption->yystate, yynrhs,
1713 yystackp]b4_user_args[);
1714 for (yys = yyoption->yystate, yyn = yynrhs;
1715 yyn > 0;
1716 yys = yys->yypred, yyn -= 1)
1717 yyrhsloc[yyn].yystate.yyloc = yys->yyloc;
1718 }
1719 else
1720 {
1721 /* Both yyresolveAction and yyresolveLocations traverse the GSS
1722 in reverse rightmost order. It is only necessary to invoke
1723 yyresolveLocations on a subforest for which yyresolveAction
1724 would have been invoked next had an ambiguity not been
1725 detected. Thus the location of the previous state (but not
1726 necessarily the previous state itself) is guaranteed to be
1727 resolved already. */
1728 yyGLRState *yyprevious = yyoption->yystate;
1729 yyrhsloc[0].yystate.yyloc = yyprevious->yyloc;
1730 }
aebb55eb
AD
1731 {
1732 int yychar_current = yychar;
1733 YYSTYPE yylval_current = yylval;
1734 YYLTYPE yylloc_current = yylloc;
1735 yychar = yyoption->yyrawchar;
1736 yylval = yyoption->yyval;
1737 yylloc = yyoption->yyloc;
1738 YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs);
1739 yychar = yychar_current;
1740 yylval = yylval_current;
1741 yylloc = yylloc_current;
1742 }
e9690142 1743 }
8710fc41 1744 }
67b8cfbd 1745}]])[
01241d47 1746
ca2a6d15
PH
1747/** Resolve the ambiguity represented in state YYS in *YYSTACKP,
1748 * perform the indicated actions, and set the semantic value of YYS.
1749 * If result != yyok, the chain of semantic options in YYS has been
1750 * cleared instead or it has been left unmodified except that
1751 * redundant options may have been removed. Regardless of whether
1752 * result = yyok, YYS has been left with consistent data so that
520181ab 1753 * yydestroyGLRState can be invoked if necessary. */
01241d47 1754static YYRESULTTAG
520181ab 1755yyresolveValue (yyGLRState* yys, yyGLRStack* yystackp]b4_user_formals[)
01241d47 1756{
d659304d 1757 yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal;
769a8ef9 1758 yySemanticOption* yybest = yyoptionList;
f9315de5 1759 yySemanticOption** yypp;
769a8ef9 1760 yybool yymerge = yyfalse;
520181ab 1761 YYSTYPE yysval;
769a8ef9
AD
1762 YYRESULTTAG yyflag;]b4_locations_if([
1763 YYLTYPE *yylocp = &yys->yyloc;])[
01241d47 1764
8d0b7cef 1765 for (yypp = &yyoptionList->yynext; *yypp != YY_NULLPTR; )
01241d47 1766 {
f9315de5
PE
1767 yySemanticOption* yyp = *yypp;
1768
01241d47 1769 if (yyidenticalOptions (yybest, yyp))
e9690142
JD
1770 {
1771 yymergeOptionSets (yybest, yyp);
1772 *yypp = yyp->yynext;
1773 }
01241d47 1774 else
e9690142
JD
1775 {
1776 switch (yypreference (yybest, yyp))
1777 {
1778 case 0:]b4_locations_if([[
1779 yyresolveLocations (yys, 1, yystackp]b4_user_args[);]])[
1780 return yyreportAmbiguity (yybest, yyp]b4_pure_args[);
1781 break;
1782 case 1:
1783 yymerge = yytrue;
1784 break;
1785 case 2:
1786 break;
1787 case 3:
1788 yybest = yyp;
1789 yymerge = yyfalse;
1790 break;
1791 default:
1792 /* This cannot happen so it is not worth a YYASSERT (yyfalse),
1793 but some compilers complain if the default case is
1794 omitted. */
1795 break;
1796 }
1797 yypp = &yyp->yynext;
1798 }
01241d47
PH
1799 }
1800
fb8135fa 1801 if (yymerge)
01241d47 1802 {
f9315de5 1803 yySemanticOption* yyp;
01241d47 1804 int yyprec = yydprec[yybest->yyrule];
769a8ef9 1805 yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args[);
520181ab 1806 if (yyflag == yyok)
8d0b7cef 1807 for (yyp = yybest->yynext; yyp != YY_NULLPTR; yyp = yyp->yynext)
e9690142
JD
1808 {
1809 if (yyprec == yydprec[yyp->yyrule])
1810 {
3e75a2c9 1811 YYSTYPE yysval_other;]b4_locations_if([
769a8ef9
AD
1812 YYLTYPE yydummy;])[
1813 yyflag = yyresolveAction (yyp, yystackp, &yysval_other]b4_locuser_args([&yydummy])[);
e9690142
JD
1814 if (yyflag != yyok)
1815 {
1816 yydestruct ("Cleanup: discarding incompletely merged value for",
1817 yystos[yys->yylrState],
3e75a2c9 1818 &yysval]b4_locuser_args[);
e9690142
JD
1819 break;
1820 }
1821 yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other);
1822 }
1823 }
520181ab
JD
1824 }
1825 else
769a8ef9 1826 yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args([yylocp])[);
520181ab
JD
1827
1828 if (yyflag == yyok)
1829 {
1830 yys->yyresolved = yytrue;
1831 yys->yysemantics.yysval = yysval;
01241d47
PH
1832 }
1833 else
8d0b7cef 1834 yys->yysemantics.yyfirstVal = YY_NULLPTR;
520181ab 1835 return yyflag;
01241d47
PH
1836}
1837
1838static YYRESULTTAG
3e7a2cd9 1839yyresolveStack (yyGLRStack* yystackp]b4_user_formals[)
01241d47 1840{
8d0b7cef 1841 if (yystackp->yysplitPoint != YY_NULLPTR)
01241d47
PH
1842 {
1843 yyGLRState* yys;
1844 int yyn;
1845
3e7a2cd9 1846 for (yyn = 0, yys = yystackp->yytops.yystates[0];
e9690142
JD
1847 yys != yystackp->yysplitPoint;
1848 yys = yys->yypred, yyn += 1)
1849 continue;
3e7a2cd9 1850 YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp
e9690142 1851 ]b4_user_args[));
01241d47
PH
1852 }
1853 return yyok;
1854}
1855
1856static void
3e7a2cd9 1857yycompressStack (yyGLRStack* yystackp)
01241d47
PH
1858{
1859 yyGLRState* yyp, *yyq, *yyr;
1860
8d0b7cef 1861 if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == YY_NULLPTR)
01241d47
PH
1862 return;
1863
8d0b7cef 1864 for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = YY_NULLPTR;
3e7a2cd9 1865 yyp != yystackp->yysplitPoint;
01241d47
PH
1866 yyr = yyp, yyp = yyq, yyq = yyp->yypred)
1867 yyp->yypred = yyr;
fb8135fa 1868
3e7a2cd9
PE
1869 yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems;
1870 yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1;
1871 yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems;
8d0b7cef
AD
1872 yystackp->yysplitPoint = YY_NULLPTR;
1873 yystackp->yylastDeleted = YY_NULLPTR;
fb8135fa 1874
8d0b7cef 1875 while (yyr != YY_NULLPTR)
fb8135fa 1876 {
3e7a2cd9 1877 yystackp->yynextFree->yystate = *yyr;
01241d47 1878 yyr = yyr->yypred;
3e7a2cd9
PE
1879 yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate;
1880 yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate;
1881 yystackp->yynextFree += 1;
1882 yystackp->yyspaceLeft -= 1;
01241d47
PH
1883 }
1884}
1885
1886static YYRESULTTAG
3e7a2cd9 1887yyprocessOneStack (yyGLRStack* yystackp, size_t yyk,
e9690142 1888 size_t yyposn]b4_pure_formals[)
01241d47 1889{
8d0b7cef 1890 while (yystackp->yytops.yystates[yyk] != YY_NULLPTR)
01241d47 1891 {
3e7a2cd9 1892 yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState;
63cb01d6 1893 YYDPRINTF ((stderr, "Stack %lu Entering state %d\n",
e9690142 1894 (unsigned long int) yyk, yystate));
01241d47 1895
64c4fd52
PE
1896 YYASSERT (yystate != YYFINAL);
1897
fb8135fa 1898 if (yyisDefaultedState (yystate))
e9690142 1899 {
c49784f5
AD
1900 YYRESULTTAG yyflag;
1901 yyRuleNum yyrule = yydefaultAction (yystate);
e9690142
JD
1902 if (yyrule == 0)
1903 {
1904 YYDPRINTF ((stderr, "Stack %lu dies.\n",
1905 (unsigned long int) yyk));
1906 yymarkStackDeleted (yystackp, yyk);
1907 return yyok;
1908 }
1909 yyflag = yyglrReduce (yystackp, yyk, yyrule, yyimmediate[yyrule]]b4_user_args[);
ca2a6d15
PH
1910 if (yyflag == yyerr)
1911 {
f86a7807
AD
1912 YYDPRINTF ((stderr,
1913 "Stack %lu dies "
1914 "(predicate failure or explicit user error).\n",
e9690142
JD
1915 (unsigned long int) yyk));
1916 yymarkStackDeleted (yystackp, yyk);
1917 return yyok;
1918 }
1919 if (yyflag != yyok)
ca2a6d15 1920 return yyflag;
e9690142 1921 }
fb8135fa 1922 else
e9690142
JD
1923 {
1924 yySymbol yytoken;
c49784f5
AD
1925 int yyaction;
1926 const short int* yyconflicts;
ca2a6d15 1927
e9690142
JD
1928 yystackp->yytops.yylookaheadNeeds[yyk] = yytrue;
1929 if (yychar == YYEMPTY)
1930 {
1931 YYDPRINTF ((stderr, "Reading a token: "));
64b3612a 1932 yychar = ]b4_lex[;
e9690142
JD
1933 }
1934
1935 if (yychar <= YYEOF)
1936 {
1937 yychar = yytoken = YYEOF;
1938 YYDPRINTF ((stderr, "Now at end of input.\n"));
1939 }
1940 else
1941 {
1942 yytoken = YYTRANSLATE (yychar);
1943 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
1944 }
1945
1946 yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
1947
1948 while (*yyconflicts != 0)
1949 {
1950 YYRESULTTAG yyflag;
1951 size_t yynewStack = yysplitStack (yystackp, yyk);
1952 YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n",
1953 (unsigned long int) yynewStack,
1954 (unsigned long int) yyk));
1955 yyflag = yyglrReduce (yystackp, yynewStack,
1956 *yyconflicts,
1957 yyimmediate[*yyconflicts]]b4_user_args[);
ca2a6d15 1958 if (yyflag == yyok)
e9690142
JD
1959 YYCHK (yyprocessOneStack (yystackp, yynewStack,
1960 yyposn]b4_pure_args[));
1961 else if (yyflag == yyerr)
1962 {
1963 YYDPRINTF ((stderr, "Stack %lu dies.\n",
1964 (unsigned long int) yynewStack));
1965 yymarkStackDeleted (yystackp, yynewStack);
1966 }
1967 else
1968 return yyflag;
1969 yyconflicts += 1;
1970 }
1971
1972 if (yyisShiftAction (yyaction))
1973 break;
1974 else if (yyisErrorAction (yyaction))
ca2a6d15 1975 {
e9690142
JD
1976 YYDPRINTF ((stderr, "Stack %lu dies.\n",
1977 (unsigned long int) yyk));
1978 yymarkStackDeleted (yystackp, yyk);
1979 break;
1980 }
1981 else
1982 {
1983 YYRESULTTAG yyflag = yyglrReduce (yystackp, yyk, -yyaction,
c49784f5 1984 yyimmediate[-yyaction]]b4_user_args[);
e9690142 1985 if (yyflag == yyerr)
ca2a6d15 1986 {
f86a7807
AD
1987 YYDPRINTF ((stderr,
1988 "Stack %lu dies "
1989 "(predicate failure or explicit user error).\n",
e9690142
JD
1990 (unsigned long int) yyk));
1991 yymarkStackDeleted (yystackp, yyk);
ca2a6d15 1992 break;
e9690142
JD
1993 }
1994 else if (yyflag != yyok)
ca2a6d15
PH
1995 return yyflag;
1996 }
e9690142 1997 }
01241d47
PH
1998 }
1999 return yyok;
2000}
2001
56f8d560 2002static void
d6cff4dc 2003yyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
01241d47 2004{
25a648d8
JD
2005 if (yystackp->yyerrState != 0)
2006 return;
2007#if ! YYERROR_VERBOSE
2008 yyerror (]b4_lyyerror_args[YY_("syntax error"));
2009#else
1127a75a 2010 {
d2060f06 2011 yySymbol yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
8d0b7cef 2012 size_t yysize0 = yytnamerr (YY_NULLPTR, yytokenName (yytoken));
b4bbc4a0 2013 size_t yysize = yysize0;
b4bbc4a0 2014 yybool yysize_overflow = yyfalse;
8d0b7cef 2015 char* yymsg = YY_NULLPTR;
b4bbc4a0
JD
2016 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
2017 /* Internationalized format string. */
8d0b7cef 2018 const char *yyformat = YY_NULLPTR;
b4bbc4a0
JD
2019 /* Arguments of yyformat. */
2020 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
d2060f06
JD
2021 /* Number of reported tokens (one for the "unexpected", one per
2022 "expected"). */
2023 int yycount = 0;
b4bbc4a0 2024
d2060f06
JD
2025 /* There are many possibilities here to consider:
2026 - If this state is a consistent state with a default action, then
2027 the only way this function was invoked is if the default action
2028 is an error action. In that case, don't check for expected
2029 tokens because there are none.
2030 - The only way there can be no lookahead present (in yychar) is if
2031 this state is a consistent state with a default action. Thus,
2032 detecting the absence of a lookahead is sufficient to determine
2033 that there is no unexpected or expected token to report. In that
2034 case, just report a simple "syntax error".
2035 - Don't assume there isn't a lookahead just because this state is a
2036 consistent state with a default action. There might have been a
2037 previous inconsistent state, consistent state with a non-default
2038 action, or user semantic action that manipulated yychar.
2039 - Of course, the expected token list depends on states to have
2040 correct lookahead information, and it depends on the parser not
2041 to perform extra reductions after fetching a lookahead from the
2042 scanner and before detecting a syntax error. Thus, state merging
2043 (from LALR or IELR) and default reductions corrupt the expected
2044 token list. However, the list is correct for canonical LR with
2045 one exception: it will still contain any token that will not be
2046 accepted due to an error action in a later state.
2047 */
2048 if (yytoken != YYEMPTY)
2049 {
2050 int yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
2051 yyarg[yycount++] = yytokenName (yytoken);
2052 if (!yypact_value_is_default (yyn))
2053 {
b4bbc4a0
JD
2054 /* Start YYX at -YYN if negative to avoid negative indexes in
2055 YYCHECK. In other words, skip the first -YYN actions for this
2056 state because they are default actions. */
2057 int yyxbegin = yyn < 0 ? -yyn : 0;
b4bbc4a0
JD
2058 /* Stay within bounds of both yycheck and yytname. */
2059 int yychecklim = YYLAST - yyn + 1;
2060 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
2b008529 2061 int yyx;
b4bbc4a0
JD
2062 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
2063 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
2064 && !yytable_value_is_error (yytable[yyx + yyn]))
2065 {
2066 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
2067 {
2068 yycount = 1;
2069 yysize = yysize0;
2070 break;
2071 }
2072 yyarg[yycount++] = yytokenName (yyx);
fc28638e 2073 {
8d0b7cef 2074 size_t yysz = yysize + yytnamerr (YY_NULLPTR, yytokenName (yyx));
fc28638e
AD
2075 yysize_overflow |= yysz < yysize;
2076 yysize = yysz;
2077 }
b4bbc4a0 2078 }
d2060f06
JD
2079 }
2080 }
b4bbc4a0
JD
2081
2082 switch (yycount)
2083 {
2084#define YYCASE_(N, S) \
2085 case N: \
2086 yyformat = S; \
2087 break
d2060f06 2088 YYCASE_(0, YY_("syntax error"));
b4bbc4a0
JD
2089 YYCASE_(1, YY_("syntax error, unexpected %s"));
2090 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
2091 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
2092 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
2093 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
2b008529 2094#undef YYCASE_
b4bbc4a0 2095 }
2b008529 2096
fc28638e
AD
2097 {
2098 size_t yysz = yysize + strlen (yyformat);
2099 yysize_overflow |= yysz < yysize;
2100 yysize = yysz;
2101 }
63cb01d6 2102
b4bbc4a0
JD
2103 if (!yysize_overflow)
2104 yymsg = (char *) YYMALLOC (yysize);
63cb01d6 2105
b4bbc4a0
JD
2106 if (yymsg)
2107 {
2108 char *yyp = yymsg;
2109 int yyi = 0;
2110 while ((*yyp = *yyformat))
2111 {
2112 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
2113 {
2114 yyp += yytnamerr (yyp, yyarg[yyi++]);
2115 yyformat += 2;
2116 }
2117 else
2118 {
2119 yyp++;
2120 yyformat++;
2121 }
2122 }
2123 yyerror (]b4_lyyerror_args[yymsg);
2124 YYFREE (yymsg);
2125 }
2126 else
2127 {
2128 yyerror (]b4_lyyerror_args[YY_("syntax error"));
2129 yyMemoryExhausted (yystackp);
01241d47 2130 }
1127a75a 2131 }
25a648d8 2132#endif /* YYERROR_VERBOSE */
b4bbc4a0
JD
2133 yynerrs += 1;
2134}
01241d47 2135
d6cff4dc
AD
2136/* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2137 yylval, and yylloc are the syntactic category, semantic value, and location
742e4900 2138 of the lookahead. */
56f8d560 2139static void
d6cff4dc 2140yyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
01241d47 2141{
1154cced
AD
2142 size_t yyk;
2143 int yyj;
01241d47 2144
3e7a2cd9 2145 if (yystackp->yyerrState == 3)
2a1fe6ed
AD
2146 /* We just shifted the error token and (perhaps) took some
2147 reductions. Skip tokens until we can proceed. */
56f8d560 2148 while (yytrue)
2a1fe6ed 2149 {
e9690142
JD
2150 yySymbol yytoken;
2151 if (yychar == YYEOF)
8d0b7cef 2152 yyFail (yystackp][]b4_lpure_args[, YY_NULLPTR);
e9690142
JD
2153 if (yychar != YYEMPTY)
2154 {]b4_locations_if([[
2155 /* We throw away the lookahead, but the error range
2156 of the shifted error token must take it into account. */
2157 yyGLRState *yys = yystackp->yytops.yystates[0];
2158 yyGLRStackItem yyerror_range[3];
2159 yyerror_range[1].yystate.yyloc = yys->yyloc;
2160 yyerror_range[2].yystate.yyloc = yylloc;
2161 YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2);]])[
2162 yytoken = YYTRANSLATE (yychar);
2163 yydestruct ("Error: discarding",
3e75a2c9 2164 yytoken, &yylval]b4_locuser_args([&yylloc])[);
e9690142
JD
2165 }
2166 YYDPRINTF ((stderr, "Reading a token: "));
64b3612a 2167 yychar = ]b4_lex[;
e9690142
JD
2168 if (yychar <= YYEOF)
2169 {
2170 yychar = yytoken = YYEOF;
2171 YYDPRINTF ((stderr, "Now at end of input.\n"));
2172 }
2173 else
2174 {
2175 yytoken = YYTRANSLATE (yychar);
2176 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2177 }
2178 yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
2179 if (yypact_value_is_default (yyj))
2180 return;
2181 yyj += yytoken;
2182 if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
2183 {
2184 if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
2185 return;
2186 }
2187 else if (! yytable_value_is_error (yytable[yyj]))
2188 return;
2a1fe6ed 2189 }
fb8135fa 2190
2a1fe6ed 2191 /* Reduce to one stack. */
3e7a2cd9 2192 for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
8d0b7cef 2193 if (yystackp->yytops.yystates[yyk] != YY_NULLPTR)
01241d47 2194 break;
3e7a2cd9 2195 if (yyk >= yystackp->yytops.yysize)
8d0b7cef 2196 yyFail (yystackp][]b4_lpure_args[, YY_NULLPTR);
3e7a2cd9
PE
2197 for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
2198 yymarkStackDeleted (yystackp, yyk);
2199 yyremoveDeletes (yystackp);
2200 yycompressStack (yystackp);
01241d47 2201
9d9b8b70 2202 /* Now pop stack until we find a state that shifts the error token. */
3e7a2cd9 2203 yystackp->yyerrState = 3;
8d0b7cef 2204 while (yystackp->yytops.yystates[0] != YY_NULLPTR)
01241d47 2205 {
3e7a2cd9 2206 yyGLRState *yys = yystackp->yytops.yystates[0];
7bd6c77e 2207 yyj = yypact[yys->yylrState];
f2b30bdf 2208 if (! yypact_value_is_default (yyj))
e9690142
JD
2209 {
2210 yyj += YYTERROR;
2211 if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
2212 && yyisShiftAction (yytable[yyj]))
2213 {
3e75a2c9
AD
2214 /* Shift the error token. */]b4_locations_if([[
2215 /* First adjust its location.*/
769a8ef9 2216 YYLTYPE yyerrloc;
e9690142
JD
2217 yystackp->yyerror_range[2].yystate.yyloc = yylloc;
2218 YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2);]])[
2219 YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
2220 &yylval, &yyerrloc);
2221 yyglrShift (yystackp, 0, yytable[yyj],
3e75a2c9 2222 yys->yyposn, &yylval]b4_locations_if([, &yyerrloc])[);
e9690142
JD
2223 yys = yystackp->yytops.yystates[0];
2224 break;
2225 }
3e75a2c9 2226 }]b4_locations_if([[
769a8ef9 2227 yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
8d0b7cef 2228 if (yys->yypred != YY_NULLPTR)
e9690142 2229 yydestroyGLRState ("Error: popping", yys]b4_user_args[);
3e7a2cd9
PE
2230 yystackp->yytops.yystates[0] = yys->yypred;
2231 yystackp->yynextFree -= 1;
2232 yystackp->yyspaceLeft += 1;
01241d47 2233 }
8d0b7cef
AD
2234 if (yystackp->yytops.yystates[0] == YY_NULLPTR)
2235 yyFail (yystackp][]b4_lpure_args[, YY_NULLPTR);
fb8135fa
AD
2236}
2237
e9690142
JD
2238#define YYCHK1(YYE) \
2239 do { \
2240 switch (YYE) { \
2241 case yyok: \
2242 break; \
2243 case yyabort: \
2244 goto yyabortlab; \
2245 case yyaccept: \
2246 goto yyacceptlab; \
2247 case yyerr: \
2248 goto yyuser_error; \
2249 default: \
2250 goto yybuglab; \
2251 } \
56f8d560 2252 } while (0)
01241d47 2253
0245f82d
AD
2254/*----------.
2255| yyparse. |
2256`----------*/
2257
15f66669 2258]b4_function_define([yyparse], [int], b4_parse_param)[
01241d47 2259{
6100a9aa 2260 int yyresult;
01241d47 2261 yyGLRStack yystack;
d6cff4dc 2262 yyGLRStack* const yystackp = &yystack;
01241d47 2263 size_t yyposn;
fb8135fa 2264
2f4f028d 2265 YYDPRINTF ((stderr, "Starting parse\n"));
2a1fe6ed 2266
bf70fa87 2267 yychar = YYEMPTY;
a68b1f23
AD
2268 yylval = yyval_default;]b4_locations_if([
2269 yylloc = yyloc_default;])[
2270]m4_ifdef([b4_initial_action], [
cd735a8c 2271b4_dollar_pushdef([yylval], [], [yylloc])dnl
9d9b8b70 2272 /* User initialization code. */
8ec0a172 2273 b4_user_initial_action
cd735a8c 2274b4_dollar_popdef])[]dnl
b8458aa5 2275[
d6cff4dc 2276 if (! yyinitGLRStack (yystackp, YYINITDEPTH))
1a059451 2277 goto yyexhaustedlab;
c89b4c03 2278 switch (YYSETJMP (yystack.yyexception_buffer))
6100a9aa 2279 {
c89b4c03 2280 case 0: break;
6100a9aa 2281 case 1: goto yyabortlab;
1a059451 2282 case 2: goto yyexhaustedlab;
c89b4c03 2283 default: goto yybuglab;
6100a9aa 2284 }
769a8ef9 2285 yyglrShift (&yystack, 0, 0, 0, &yylval]b4_locations_if([, &yylloc])[);
01241d47
PH
2286 yyposn = 0;
2287
56f8d560 2288 while (yytrue)
01241d47 2289 {
21964f43 2290 /* For efficiency, we have two loops, the first of which is
e9690142
JD
2291 specialized to deterministic operation (single stack, no
2292 potential ambiguity). */
01241d47 2293 /* Standard mode */
56f8d560 2294 while (yytrue)
e9690142
JD
2295 {
2296 yyRuleNum yyrule;
2297 int yyaction;
2298 const short int* yyconflicts;
2299
2300 yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
2301 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2302 if (yystate == YYFINAL)
2303 goto yyacceptlab;
2304 if (yyisDefaultedState (yystate))
2305 {
2306 yyrule = yydefaultAction (yystate);
2307 if (yyrule == 0)
2308 {
2309]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
2310 yyreportSyntaxError (&yystack]b4_user_args[);
2311 goto yyuser_error;
2312 }
2313 YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_user_args[));
2314 }
2315 else
2316 {
2317 yySymbol yytoken;
2318 if (yychar == YYEMPTY)
2319 {
2320 YYDPRINTF ((stderr, "Reading a token: "));
64b3612a 2321 yychar = ]b4_lex[;
e9690142
JD
2322 }
2323
2324 if (yychar <= YYEOF)
2325 {
2326 yychar = yytoken = YYEOF;
2327 YYDPRINTF ((stderr, "Now at end of input.\n"));
2328 }
2329 else
2330 {
2331 yytoken = YYTRANSLATE (yychar);
2332 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2333 }
2334
2335 yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
2336 if (*yyconflicts != 0)
2337 break;
2338 if (yyisShiftAction (yyaction))
2339 {
2340 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2341 yychar = YYEMPTY;
2342 yyposn += 1;
3e75a2c9 2343 yyglrShift (&yystack, 0, yyaction, yyposn, &yylval]b4_locations_if([, &yylloc])[);
e9690142
JD
2344 if (0 < yystack.yyerrState)
2345 yystack.yyerrState -= 1;
2346 }
2347 else if (yyisErrorAction (yyaction))
2348 {
2349]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
2350 yyreportSyntaxError (&yystack]b4_user_args[);
2351 goto yyuser_error;
2352 }
2353 else
2354 YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_user_args[));
2355 }
2356 }
01241d47 2357
56f8d560 2358 while (yytrue)
e9690142
JD
2359 {
2360 yySymbol yytoken_to_shift;
2361 size_t yys;
2362
2363 for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
2364 yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
2365
2366 /* yyprocessOneStack returns one of three things:
2367
2368 - An error flag. If the caller is yyprocessOneStack, it
2369 immediately returns as well. When the caller is finally
2370 yyparse, it jumps to an error label via YYCHK1.
2371
2372 - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
2373 (&yystack, yys), which sets the top state of yys to NULL. Thus,
2374 yyparse's following invocation of yyremoveDeletes will remove
2375 the stack.
2376
2377 - yyok, when ready to shift a token.
2378
2379 Except in the first case, yyparse will invoke yyremoveDeletes and
2380 then shift the next token onto all remaining stacks. This
2381 synchronization of the shift (that is, after all preceding
2382 reductions on all stacks) helps prevent double destructor calls
2383 on yylval in the event of memory exhaustion. */
2384
2385 for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
2386 YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn]b4_lpure_args[));
2387 yyremoveDeletes (&yystack);
2388 if (yystack.yytops.yysize == 0)
2389 {
2390 yyundeleteLastStack (&yystack);
2391 if (yystack.yytops.yysize == 0)
2392 yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
2393 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
2394 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
2395]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
2396 yyreportSyntaxError (&yystack]b4_user_args[);
2397 goto yyuser_error;
2398 }
2399
2400 /* If any yyglrShift call fails, it will fail after shifting. Thus,
2401 a copy of yylval will already be on stack 0 in the event of a
2402 failure in the following loop. Thus, yychar is set to YYEMPTY
2403 before the loop to make sure the user destructor for yylval isn't
2404 called twice. */
2405 yytoken_to_shift = YYTRANSLATE (yychar);
2406 yychar = YYEMPTY;
2407 yyposn += 1;
2408 for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
2409 {
2410 int yyaction;
2411 const short int* yyconflicts;
2412 yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState;
2413 yygetLRActions (yystate, yytoken_to_shift, &yyaction,
2414 &yyconflicts);
2415 /* Note that yyconflicts were handled by yyprocessOneStack. */
2416 YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
2417 YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc);
2418 yyglrShift (&yystack, yys, yyaction, yyposn,
3e75a2c9 2419 &yylval]b4_locations_if([, &yylloc])[);
e9690142
JD
2420 YYDPRINTF ((stderr, "Stack %lu now in state #%d\n",
2421 (unsigned long int) yys,
2422 yystack.yytops.yystates[yys]->yylrState));
2423 }
2424
2425 if (yystack.yytops.yysize == 1)
2426 {
2427 YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
2428 YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
2429 yycompressStack (&yystack);
2430 break;
2431 }
2432 }
01241d47
PH
2433 continue;
2434 yyuser_error:
d6cff4dc 2435 yyrecoverSyntaxError (&yystack]b4_user_args[);
01241d47
PH
2436 yyposn = yystack.yytops.yystates[0]->yyposn;
2437 }
6100a9aa
PE
2438
2439 yyacceptlab:
2440 yyresult = 0;
2441 goto yyreturn;
2442
127287e9
PE
2443 yybuglab:
2444 YYASSERT (yyfalse);
a85284cf 2445 goto yyabortlab;
127287e9 2446
6100a9aa
PE
2447 yyabortlab:
2448 yyresult = 1;
2449 goto yyreturn;
2450
1a059451
PE
2451 yyexhaustedlab:
2452 yyerror (]b4_lyyerror_args[YY_("memory exhausted"));
6100a9aa 2453 yyresult = 2;
a85284cf 2454 goto yyreturn;
6100a9aa
PE
2455
2456 yyreturn:
868d2d96 2457 if (yychar != YYEMPTY)
dd5f2af2 2458 yydestruct ("Cleanup: discarding lookahead",
3e75a2c9 2459 YYTRANSLATE (yychar), &yylval]b4_locuser_args([&yylloc])[);
01241d47 2460
3922956a
PE
2461 /* If the stack is well-formed, pop the stack until it is empty,
2462 destroying its entries as we go. But free the stack regardless
2463 of whether it is well-formed. */
2464 if (yystack.yyitems)
2465 {
2466 yyGLRState** yystates = yystack.yytops.yystates;
2467 if (yystates)
e9690142
JD
2468 {
2469 size_t yysize = yystack.yytops.yysize;
2470 size_t yyk;
2471 for (yyk = 0; yyk < yysize; yyk += 1)
2472 if (yystates[yyk])
2473 {
2474 while (yystates[yyk])
2475 {
2476 yyGLRState *yys = yystates[yyk];
2477]b4_locations_if([[ yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
8d0b7cef 2478)[ if (yys->yypred != YY_NULLPTR)
e9690142
JD
2479 yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
2480 yystates[yyk] = yys->yypred;
2481 yystack.yynextFree -= 1;
2482 yystack.yyspaceLeft += 1;
2483 }
2484 break;
2485 }
2486 }
3922956a
PE
2487 yyfreeGLRStack (&yystack);
2488 }
258b75ca 2489
56f8d560 2490 return yyresult;
01241d47
PH
2491}
2492
2493/* DEBUGGING ONLY */
5f108727 2494#if ]b4_api_PREFIX[DEBUG
1154cced 2495static void
cf126971 2496yy_yypstack (yyGLRState* yys)
01241d47 2497{
cf126971 2498 if (yys->yypred)
01241d47 2499 {
cf126971 2500 yy_yypstack (yys->yypred);
8a86eef0 2501 YYFPRINTF (stderr, " -> ");
01241d47 2502 }
8a86eef0
JD
2503 YYFPRINTF (stderr, "%d@@%lu", yys->yylrState,
2504 (unsigned long int) yys->yyposn);
cf126971 2505}
01241d47 2506
cf126971
PE
2507static void
2508yypstates (yyGLRState* yyst)
2509{
8d0b7cef 2510 if (yyst == YY_NULLPTR)
8a86eef0 2511 YYFPRINTF (stderr, "<null>");
fb8135fa 2512 else
01241d47 2513 yy_yypstack (yyst);
8a86eef0 2514 YYFPRINTF (stderr, "\n");
01241d47
PH
2515}
2516
1154cced 2517static void
3e7a2cd9 2518yypstack (yyGLRStack* yystackp, size_t yyk)
01241d47 2519{
3e7a2cd9 2520 yypstates (yystackp->yytops.yystates[yyk]);
01241d47
PH
2521}
2522
e9690142 2523#define YYINDEX(YYX) \
8d0b7cef 2524 ((YYX) == YY_NULLPTR ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
01241d47
PH
2525
2526
1154cced 2527static void
3e7a2cd9 2528yypdumpstack (yyGLRStack* yystackp)
01241d47
PH
2529{
2530 yyGLRStackItem* yyp;
1154cced 2531 size_t yyi;
3e7a2cd9 2532 for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1)
01241d47 2533 {
8a86eef0
JD
2534 YYFPRINTF (stderr, "%3lu. ",
2535 (unsigned long int) (yyp - yystackp->yyitems));
f7c398aa 2536 if (*(yybool *) yyp)
e9690142 2537 {
77482f27
AD
2538 YYASSERT (yyp->yystate.yyisState);
2539 YYASSERT (yyp->yyoption.yyisState);
e9690142
JD
2540 YYFPRINTF (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
2541 yyp->yystate.yyresolved, yyp->yystate.yylrState,
2542 (unsigned long int) yyp->yystate.yyposn,
2543 (long int) YYINDEX (yyp->yystate.yypred));
2544 if (! yyp->yystate.yyresolved)
2545 YYFPRINTF (stderr, ", firstVal: %ld",
2546 (long int) YYINDEX (yyp->yystate
8a86eef0 2547 .yysemantics.yyfirstVal));
e9690142 2548 }
fb8135fa 2549 else
e9690142 2550 {
77482f27
AD
2551 YYASSERT (!yyp->yystate.yyisState);
2552 YYASSERT (!yyp->yyoption.yyisState);
e9690142
JD
2553 YYFPRINTF (stderr, "Option. rule: %d, state: %ld, next: %ld",
2554 yyp->yyoption.yyrule - 1,
2555 (long int) YYINDEX (yyp->yyoption.yystate),
2556 (long int) YYINDEX (yyp->yyoption.yynext));
2557 }
8a86eef0 2558 YYFPRINTF (stderr, "\n");
01241d47 2559 }
8a86eef0 2560 YYFPRINTF (stderr, "Tops:");
3e7a2cd9 2561 for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
8a86eef0 2562 YYFPRINTF (stderr, "%lu: %ld; ", (unsigned long int) yyi,
e9690142 2563 (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
8a86eef0 2564 YYFPRINTF (stderr, "\n");
01241d47 2565}
417141dd 2566#endif
99d795e8
TR
2567
2568#undef yylval
2569#undef yychar
2570#undef yynerrs]b4_locations_if([
2571#undef yylloc])
2572
2573m4_if(b4_prefix, [yy], [],
2574[[/* Substitute the variable and function names. */
2575#define yyparse ]b4_prefix[parse
2576#define yylex ]b4_prefix[lex
2577#define yyerror ]b4_prefix[error
2578#define yylval ]b4_prefix[lval
2579#define yychar ]b4_prefix[char
2580#define yydebug ]b4_prefix[debug
2581#define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
2582#define yylloc ]b4_prefix[lloc]])])[
2583
4524c55b 2584]b4_epilogue[]dnl
1c7ec959 2585b4_output_end()