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