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