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