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