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