105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                                                    -*- C -*-
2cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
3cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# GLR skeleton for Bison
4cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Copyright (C) 2002-2012 Free Software Foundation, Inc.
605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# This program is free software: you can redistribute it and/or modify
8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# it under the terms of the GNU General Public License as published by
905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# the Free Software Foundation, either version 3 of the License, or
10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# (at your option) any later version.
1105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#
12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This program is distributed in the hope that it will be useful,
13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# but WITHOUT ANY WARRANTY; without even the implied warranty of
14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# GNU General Public License for more details.
1605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#
17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# You should have received a copy of the GNU General Public License
1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# along with this program.  If not, see <http://www.gnu.org/licenses/>.
19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# If we are loaded by glr.cc, do not override c++.m4 definitions by
2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# those of c.m4.
2305436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_if(b4_skeleton, ["glr.c"],
2405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      [m4_include(b4_pkgdatadir/[c.m4])])
25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ---------------- ##
27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Default values.  ##
28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ---------------- ##
29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Stack parameters.
31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define_default([b4_stack_depth_max], [10000])
32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define_default([b4_stack_depth_init],  [200])
33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ------------------------ ##
37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Pure/impure interfaces.  ##
38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ------------------------ ##
39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
4005436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_define_flag_if([pure])
4105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# If glr.cc is including this file and thus has already set b4_pure_flag,
4205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# do not change the value of b4_pure_flag, and do not record a use of api.pure.
4305436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_ifndef([b4_pure_flag],
4405436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_percent_define_default([[api.pure]], [[false]])
4505436638acc7c010349a69c3395f1a57c642dc62Ying Wang m4_define([b4_pure_flag],
4605436638acc7c010349a69c3395f1a57c642dc62Ying Wang           [b4_percent_define_flag_if([[api.pure]], [[1]], [[0]])])])
47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_user_formals
49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------
50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# The possible parse-params formal arguments preceded by a comma.
51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#
52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# This is not shared with yacc.c in c.m4 because  GLR relies on ISO C
53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# formal argument declarations.
54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_user_formals],
55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[m4_ifset([b4_parse_param], [, b4_c_ansi_formals(b4_parse_param)])])
56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_lex_param
59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ------------
60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Accumule in b4_lex_param all the yylex arguments.
61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Yes, this is quite ugly...
62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_lex_param],
63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_dquote(b4_pure_if([[[[YYSTYPE *]], [[&yylval]]][]dnl
64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_locations_if([, [[YYLTYPE *], [&yylloc]]])])dnl
65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifdef([b4_lex_param], [, ]b4_lex_param)))
66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_yyerror_args
69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------
70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Optional effective arguments passed to yyerror: user args plus yylloc, and
71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# a trailing comma.
72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_yyerror_args],
73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_pure_if([b4_locations_if([yylocp, ])])dnl
74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_lyyerror_args
78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ----------------
7905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Same as above, but on the lookahead, hence &yylloc instead of yylocp.
80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_lyyerror_args],
81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_pure_if([b4_locations_if([&yylloc, ])])dnl
82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])])
83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_pure_args
86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ------------
87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Same as b4_yyerror_args, but with a leading comma.
88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_pure_args],
89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_pure_if([b4_locations_if([, yylocp])])[]b4_user_args])
90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_lpure_args
93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# -------------
9405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Same as above, but on the lookahead, hence &yylloc instead of yylocp.
95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_lpure_args],
96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_pure_if([b4_locations_if([, &yylloc])])[]b4_user_args])
97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
9905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_pure_formals
101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------
10205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Arguments passed to yyerror: user formals plus yylocp with leading comma.
103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_pure_formals],
104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[b4_pure_if([b4_locations_if([, YYLTYPE *yylocp])])[]b4_user_formals])
105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
10705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# b4_locuser_formals(LOC = yylocp)
10805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# --------------------------------
10905436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_define([b4_locuser_formals],
11005436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_locations_if([, YYLTYPE *m4_default([$1], [yylocp])])[]b4_user_formals])
11105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# b4_locuser_args(LOC = yylocp)
11405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# -----------------------------
11505436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_define([b4_locuser_args],
11605436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_locations_if([, m4_default([$1], [yylocp])])[]b4_user_args])
11705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
11905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ----------------- ##
121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Semantic Values.  ##
122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ----------------- ##
123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_lhs_value([TYPE])
126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# --------------------
127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Expansion of $<TYPE>$.
128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_lhs_value],
129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[((*yyvalp)[]m4_ifval([$1], [.$1]))])
130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_rhs_value(RULE-LENGTH, NUM, [TYPE])
133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# --------------------------------------
134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# symbols on RHS.
136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_rhs_value],
137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3]))])
138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ----------- ##
142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Locations.  ##
143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## ----------- ##
144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_lhs_location()
146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# -----------------
147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Expansion of @$.
148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_lhs_location],
149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[(*yylocp)])
150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# b4_rhs_location(RULE-LENGTH, NUM)
153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ---------------------------------
154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# Expansion of @NUM, where the current rule has RULE-LENGTH symbols
155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# on RHS.
156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_define([b4_rhs_location],
157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[(((yyGLRStackItem const *)yyvsp)@{YYFILL (($2) - ($1))@}.yystate.yyloc)])
158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
16005436638acc7c010349a69c3395f1a57c642dc62Ying Wang## -------------- ##
16105436638acc7c010349a69c3395f1a57c642dc62Ying Wang## Declarations.  ##
16205436638acc7c010349a69c3395f1a57c642dc62Ying Wang## -------------- ##
16305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
16405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# b4_shared_declarations
16505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# ----------------------
16605436638acc7c010349a69c3395f1a57c642dc62Ying Wang# Declaration that might either go into the header (if --defines)
16705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# or open coded in the parser body.
16805436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_define([b4_shared_declarations],
16905436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_declare_yydebug[
17005436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_code_get([[requires]])[
17105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_token_enums(b4_tokens)[
17205436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_declare_yylstype[
17305436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_c_ansi_function_decl(b4_prefix[parse], [int], b4_parse_param)[
17405436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_percent_code_get([[provides]])[]dnl
17505436638acc7c010349a69c3395f1a57c642dc62Ying Wang])
17605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## -------------- ##
179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## Output files.  ##
180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project## -------------- ##
181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
18205436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_begin([b4_parser_file_name])
183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_copyright([Skeleton implementation for Bison GLR parsers in C],
18405436638acc7c010349a69c3395f1a57c642dc62Ying Wang             [2002-2012])[
18505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* C GLR parser skeleton written by Paul Hilfinger.  */
187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_identification
189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
19005436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_code_get([[top]])[
19105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]m4_if(b4_api_prefix, [yy], [],
19205436638acc7c010349a69c3395f1a57c642dc62Ying Wang[[/* Substitute the type names.  */
19305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYSTYPE ]b4_api_PREFIX[STYPE]b4_locations_if([[
19405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYLTYPE ]b4_api_PREFIX[LTYPE]])])[
19505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]m4_if(b4_prefix, [yy], [],
19605436638acc7c010349a69c3395f1a57c642dc62Ying Wang[[/* Substitute the variable and function names.  */
19705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyparse ]b4_prefix[parse
19805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yylex   ]b4_prefix[lex
19905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yyerror ]b4_prefix[error
20005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yylval  ]b4_prefix[lval
20105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yychar  ]b4_prefix[char
20205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yydebug ]b4_prefix[debug
20305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yynerrs ]b4_prefix[nerrs]b4_locations_if([[
20405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yylloc  ]b4_prefix[lloc]])])[
205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Copy the first part of user declarations.  */
20705436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_user_pre_prologue[
208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
20905436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_null_define[
210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
21105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_defines_if([[#include "@basename(]b4_spec_defines_file[@)"]],
21205436638acc7c010349a69c3395f1a57c642dc62Ying Wang               [b4_shared_declarations])[
213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Enabling verbose error messages.  */
215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef YYERROR_VERBOSE
216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYERROR_VERBOSE
217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYERROR_VERBOSE 1
218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYERROR_VERBOSE ]b4_error_verbose_flag[
220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Default (constant) value used for initialization for null
22305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   right-hand sides.  Unlike the standard yacc.c template, here we set
22405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   the default value of $$ to a zeroed-out value.  Since the default
22505436638acc7c010349a69c3395f1a57c642dc62Ying Wang   value is undefined, this behavior is technically correct.  */
22605436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic YYSTYPE yyval_default;]b4_locations_if([[
22705436638acc7c010349a69c3395f1a57c642dc62Ying Wangstatic YYLTYPE yyloc_default][]b4_yyloc_default;])[
228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Copy the second part of user declarations.  */
23005436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_user_post_prologue
23105436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_percent_code_get[]dnl
232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
23305436638acc7c010349a69c3395f1a57c642dc62Ying Wang[#include <stdio.h>
234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdlib.h>
235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <string.h>
236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YY_
23805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# if defined YYENABLE_NLS && YYENABLE_NLS
239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  if ENABLE_NLS
240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
24105436638acc7c010349a69c3395f1a57c642dc62Ying Wang#   define YY_(Msgid) dgettext ("bison-runtime", Msgid)
242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  endif
243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ifndef YY_
24505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#  define YY_(Msgid) Msgid
246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Suppress unused-variable warnings by "using" E.  */
250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if ! defined lint || defined __GNUC__
25105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYUSE(E) ((void) (E))
252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
25305436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYUSE(E) /* empty */
254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Identity function, used to suppress warnings about constant conditions.  */
257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef lint
25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYID(N) (N)
259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_c_function_def([YYID], [static int], [[int i], [i]])[
261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return i;
263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYFREE
267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYFREE free
268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYMALLOC
270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYMALLOC malloc
271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYREALLOC
273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYREALLOC realloc
274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYSIZEMAX ((size_t) -1)
277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifdef __cplusplus
279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   typedef bool yybool;
280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   typedef unsigned char yybool;
282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define yytrue 1
284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define yyfalse 0
285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYSETJMP
287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# include <setjmp.h>
288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYJMP_BUF jmp_buf
28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYSETJMP(Env) setjmp (Env)
29005436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* Pacify clang.  */
29105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYLONGJMP(Env, Val) (longjmp (Env, Val), YYASSERT (0))
292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*-----------------.
295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| GCC extensions.  |
296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`-----------------*/
297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef __attribute__
299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* This feature is available in gcc versions 2.5 and later.  */
300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# if (! defined __GNUC__ || __GNUC__ < 2 \
30105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define __attribute__(Spec) /* empty */
303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYASSERT
30705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYASSERT(Condition) ((void) ((Condition) || (abort (), 0)))
308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYFINAL -- State number of the termination state.  */
311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYFINAL  ]b4_final_state_number[
312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYLAST -- Last index in YYTABLE.  */
313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYLAST   ]b4_last[
314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYNTOKENS -- Number of terminals.  */
316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYNTOKENS  ]b4_tokens_number[
317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYNNTS -- Number of nonterminals.  */
318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYNNTS  ]b4_nterms_number[
319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYNRULES -- Number of rules.  */
320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYNRULES  ]b4_rules_number[
321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYNRULES -- Number of states.  */
322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYNSTATES  ]b4_states_number[
323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYMAXRHS -- Maximum number of symbols on right-hand side of rule.  */
324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYMAXRHS ]b4_r2_max[
325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYMAXLEFT -- Maximum number of symbols to the left of a handle
326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   accessed by $0, $-1, etc., in any rule.  */
327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYMAXLEFT ]b4_max_left_semantic_context[
328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYTRANSLATE(X) -- Bison symbol number corresponding to X.  */
330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYUNDEFTOK  ]b4_undef_token_number[
331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYMAXUTOK   ]b4_user_token_number_max[
332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
33305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYTRANSLATE(YYX)                                                \
33405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_translate])[ yytranslate[] =
338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_translate[
340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
34205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   YYRHS.  */
345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_prhs])[ yyprhs[] =
346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_prhs[
348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_rhs])[ yyrhs[] =
352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_rhs[
354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_rline])[ yyrline[] =
358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_rline[
360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
36305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE || ]b4_token_table_flag[
364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const char *const yytname[] =
367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_tname[
369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_r1])[ yyr1[] =
374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_r1[
376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_r2])[ yyr2[] =
380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_r2[
382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYDPREC[RULE-NUM] -- Dynamic precedence of rule #RULE-NUM (0 if none).  */
385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_dprec])[ yydprec[] =
386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_dprec[
388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYMERGER[RULE-NUM] -- Index of merging function for rule #RULE-NUM.  */
391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_merger])[ yymerger[] =
392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_merger[
394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
39605436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* YYDEFACT[S] -- default reduction number in state S.  Performed when
39705436638acc7c010349a69c3395f1a57c642dc62Ying Wang   YYTABLE doesn't specify something else to do.  Zero means the default
39805436638acc7c010349a69c3395f1a57c642dc62Ying Wang   is an error.  */
399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_defact])[ yydefact[] =
400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_defact[
402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYPDEFGOTO[NTERM-NUM].  */
405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_defgoto])[ yydefgoto[] =
406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_defgoto[
408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   STATE-NUM.  */
412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYPACT_NINF ]b4_pact_ninf[
413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_pact])[ yypact[] =
414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_pact[
416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYPGOTO[NTERM-NUM].  */
419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_pgoto])[ yypgoto[] =
420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_pgoto[
422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   positive, shift that token.  If negative, reduce the rule which
42605436638acc7c010349a69c3395f1a57c642dc62Ying Wang   number is the opposite.  If YYTABLE_NINF, syntax error.  */
427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYTABLE_NINF ]b4_table_ninf[
428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_table])[ yytable[] =
429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_table[
431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYCONFLP[YYPACT[STATE-NUM]] -- Pointer into YYCONFL of start of
434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   list of conflicting reductions corresponding to action entry for
435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   state STATE-NUM in yytable.  0 means no conflicts.  The list in
436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   yyconfl is terminated by a rule number of 0.  */
437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_conflict_list_heads])[ yyconflp[] =
438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_conflict_list_heads[
440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYCONFL[I] -- lists of conflicting rule numbers, each terminated by
443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   0, pointed into by YYCONFLP.  */
444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]dnl Do not use b4_int_type_for here, since there are places where
445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdnl pointers onto yyconfl are taken, which type is "short int *".
446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdnl We probably ought to introduce a type for confl.
447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[static const short int yyconfl[] =
448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_conflicting_rules[
450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_check])[ yycheck[] =
453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_check[
455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   symbol of state STATE-NUM.  */
459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const ]b4_int_type_for([b4_stos])[ yystos[] =
460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  ]b4_stos[
462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Error token number */
465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYTERROR 1
466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_locations_if([[
46805436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_yylloc_default_define[
46905436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYRHSLOC(Rhs, K) ((Rhs)[K].yystate.yyloc)
47005436638acc7c010349a69c3395f1a57c642dc62Ying Wang]])[
47105436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_yy_location_print_define[
472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYLEX -- calling `yylex' with the right arguments.  */
474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYLEX ]b4_c_function_call([yylex], [int], b4_lex_param)[
475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_pure_if(
477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#undef yynerrs
479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define yynerrs (yystackp->yyerrcnt)
480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#undef yychar
481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define yychar (yystackp->yyrawchar)
482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#undef yylval
483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define yylval (yystackp->yyval)
484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#undef yylloc
485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define yylloc (yystackp->yyloc)
486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectm4_if(b4_prefix[], [yy], [],
487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[#define b4_prefix[]nerrs yynerrs
488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define b4_prefix[]char yychar
489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define b4_prefix[]lval yylval
490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define b4_prefix[]lloc yylloc])],
49105436638acc7c010349a69c3395f1a57c642dc62Ying Wang[YYSTYPE yylval;]b4_locations_if([[
49205436638acc7c010349a69c3395f1a57c642dc62Ying WangYYLTYPE yylloc;]])[
493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint yynerrs;
495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint yychar;])[
496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const int YYEOF = 0;
498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic const int YYEMPTY = -2;
499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef enum { yyok, yyaccept, yyabort, yyerr } YYRESULTTAG;
501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
50205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYCHK(YYE)                                                           \
50305436638acc7c010349a69c3395f1a57c642dc62Ying Wang   do { YYRESULTTAG yyflag = YYE; if (yyflag != yyok) return yyflag; }       \
504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   while (YYID (0))
505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
50605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ifndef YYFPRINTF
509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define YYFPRINTF fprintf
510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
51205436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYDPRINTF(Args)                        \
51305436638acc7c010349a69c3395f1a57c642dc62Ying Wangdo {                                            \
51405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yydebug)                                  \
51505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYFPRINTF Args;                             \
516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} while (YYID (0))
517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_yy_symbol_print_generate([b4_c_ansi_function_def])[
519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
52005436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_SYMBOL_PRINT(Title, Type, Value, Location)          \
52105436638acc7c010349a69c3395f1a57c642dc62Ying Wangdo {                                                            \
52205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yydebug)                                                  \
52305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {                                                           \
52405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, "%s ", Title);                         \
52505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yy_symbol_print (stderr, Type, Value]b4_locuser_args([Location])[);        \
52605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, "\n");                                 \
52705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                           \
528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} while (YYID (0))
529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Nonzero means print parse trace.  It is left uninitialized so that
531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   multiple parsers can coexist.  */
532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectint yydebug;
533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
53405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else /* !]b4_api_PREFIX[DEBUG */
535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYDPRINTF(Args)
537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
53905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* !]b4_api_PREFIX[DEBUG */
540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYINITDEPTH -- initial size of the parser's stacks.  */
54205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#ifndef YYINITDEPTH
543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYINITDEPTH ]b4_stack_depth_init[
544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
546cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   if the built-in stack extension method is used).
548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   Do not make this value too large; the results are undefined if
550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   SIZE_MAX < YYMAXDEPTH * sizeof (GLRStackItem)
551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   evaluated with infinite-precision integer arithmetic.  */
552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYMAXDEPTH
554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYMAXDEPTH ]b4_stack_depth_max[
555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Minimum number of free items on the stack allowed after an
558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   allocation.  This is to allow allocation and initialization
559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   to be completed by functions that call yyexpandGLRStack before the
560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   stack is expanded, thus insuring that all necessary pointers get
561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   properly redirected to new data.  */
562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define YYHEADROOM 2
563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef YYSTACKEXPANDABLE
565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# if (! defined __cplusplus \
56605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      || (]b4_locations_if([[defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL \
56705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          && ]])[defined ]b4_api_PREFIX[STYPE_IS_TRIVIAL && ]b4_api_PREFIX[STYPE_IS_TRIVIAL))
568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define YYSTACKEXPANDABLE 1
569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# else
570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  define YYSTACKEXPANDABLE 0
571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYSTACKEXPANDABLE
57505436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_RESERVE_GLRSTACK(Yystack)                   \
57605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do {                                                  \
57705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (Yystack->yyspaceLeft < YYHEADROOM)              \
57805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyexpandGLRStack (Yystack);                       \
579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  } while (YYID (0))
580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
58105436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_RESERVE_GLRSTACK(Yystack)                   \
58205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do {                                                  \
58305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (Yystack->yyspaceLeft < YYHEADROOM)              \
58405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyMemoryExhausted (Yystack);                      \
585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  } while (YYID (0))
586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYERROR_VERBOSE
590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ifndef yystpcpy
592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#   define yystpcpy stpcpy
594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  else
595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   YYDEST.  */
597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic char *
598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyystpcpy (char *yydest, const char *yysrc)
599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  char *yyd = yydest;
601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const char *yys = yysrc;
602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  while ((*yyd++ = *yys++) != '\0')
604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    continue;
605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyd - 1;
607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#  endif
609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# ifndef yytnamerr
612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   quotes and backslashes, so that it's suitable for yyerror.  The
614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   heuristic is that double-quoting is unnecessary unless the string
615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   contains an apostrophe, a comma, or backslash (other than
616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   null, do not copy; instead, return the length of what the result
618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   would have been.  */
619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic size_t
620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyytnamerr (char *yyres, const char *yystr)
621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (*yystr == '"')
623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      size_t yyn = 0;
625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      char const *yyp = yystr;
626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (;;)
62805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        switch (*++yyp)
62905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
63005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          case '\'':
63105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          case ',':
63205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            goto do_not_strip_quotes;
63305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
63405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          case '\\':
63505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (*++yyp != '\\')
63605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              goto do_not_strip_quotes;
63705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            /* Fall through.  */
63805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          default:
63905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yyres)
64005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyres[yyn] = *yyp;
64105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyn++;
64205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            break;
64305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
64405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          case '"':
64505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yyres)
64605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyres[yyn] = '\0';
64705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            return yyn;
64805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    do_not_strip_quotes: ;
650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (! yyres)
653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return strlen (yystr);
654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yystpcpy (yyres, yystr) - yyres;
656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# endif
658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* !YYERROR_VERBOSE */
660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** State numbers, as in LALR(1) machine */
662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef int yyStateNum;
663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Rule numbers, as in LALR(1) machine */
665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef int yyRuleNum;
666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Grammar symbol */
668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef short int yySymbol;
669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Item references, as in LALR(1) machine */
671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef short int yyItemNum;
672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct yyGLRState yyGLRState;
674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct yyGLRStateSet yyGLRStateSet;
675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct yySemanticOption yySemanticOption;
676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef union yyGLRStackItem yyGLRStackItem;
677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef struct yyGLRStack yyGLRStack;
678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct yyGLRState {
680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Type tag: always true.  */
681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybool yyisState;
682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Type tag for yysemantics.  If true, yysval applies, otherwise
683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   *  yyfirstVal applies.  */
684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybool yyresolved;
685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Number of corresponding LALR(1) machine state.  */
686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyStateNum yylrState;
687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Preceding state in this stack */
688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yypred;
689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Source position of the first token produced by my symbol */
690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyposn;
691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  union {
692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /** First in a chain of alternative reductions producing the
693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     *  non-terminal corresponding to this state, threaded through
694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     *  yynext.  */
695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yySemanticOption* yyfirstVal;
696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /** Semantic value for this state.  */
697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYSTYPE yysval;
69805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  } yysemantics;]b4_locations_if([[
699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Source location for this state.  */
70005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYLTYPE yyloc;]])[
701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct yyGLRStateSet {
704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState** yystates;
705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** During nondeterministic operation, yylookaheadNeeds tracks which
706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   *  stacks have actually needed the current lookahead.  During deterministic
707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   *  operation, yylookaheadNeeds[0] is not maintained since it would merely
708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   *  duplicate yychar != YYEMPTY.  */
709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybool* yylookaheadNeeds;
710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yysize, yycapacity;
711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct yySemanticOption {
714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Type tag: always false.  */
715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybool yyisState;
716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Rule number for this reduction */
717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyRuleNum yyrule;
718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** The last RHS state in the list of states to be reduced.  */
719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yystate;
720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** The lookahead for this reduction.  */
721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyrawchar;
72205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYSTYPE yyval;]b4_locations_if([[
72305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYLTYPE yyloc;]])[
724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /** Next sibling in chain of options.  To facilitate merging,
725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   *  options are chained in decreasing order by address.  */
726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yySemanticOption* yynext;
727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Type of the items in the GLR stack.  The yyisState field
730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  indicates which item of the union is valid.  */
731cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectunion yyGLRStackItem {
732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState yystate;
733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yySemanticOption yyoption;
734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct yyGLRStack {
737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyerrState;
738cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_locations_if([[  /* To compute the location of the error token.  */
739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem yyerror_range[3];]])[
740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_pure_if(
741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyerrcnt;
743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyrawchar;
74405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYSTYPE yyval;]b4_locations_if([[
74505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYLTYPE yyloc;]])[
746cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project])[
747cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYJMP_BUF yyexception_buffer;
748cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yyitems;
749cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yynextFree;
750cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyspaceLeft;
751cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yysplitPoint;
752cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yylastDeleted;
753cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStateSet yytops;
754cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project};
755cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
756cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYSTACKEXPANDABLE
757cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yyexpandGLRStack (yyGLRStack* yystackp);
758cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
759cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
760cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
761cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  __attribute__ ((__noreturn__));
762cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
763cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyFail (yyGLRStack* yystackp]b4_pure_formals[, const char* yymsg)
764cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
76505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yymsg != YY_NULL)
766cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyerror (]b4_yyerror_args[yymsg);
767cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYLONGJMP (yystackp->yyexception_buffer, 1);
768cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
769cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
770cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yyMemoryExhausted (yyGLRStack* yystackp)
771cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  __attribute__ ((__noreturn__));
772cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
773cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyMemoryExhausted (yyGLRStack* yystackp)
774cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
775cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYLONGJMP (yystackp->yyexception_buffer, 2);
776cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
777cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
77805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG || YYERROR_VERBOSE
779cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** A printable representation of TOKEN.  */
780cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline const char*
781cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyytokenName (yySymbol yytoken)
782cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
783cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yytoken == YYEMPTY)
784cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return "";
785cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yytname[yytoken];
787cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Fill in YYVSP[YYLOW1 .. YYLOW0-1] from the chain of states starting
791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  at YYVSP[YYLOW0].yystate.yypred.  Leaves YYVSP[YYLOW1].yystate.yypred
792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  containing the pointer to the next state in the chain.  */
793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yyfillin (yyGLRStackItem *, int, int) __attribute__ ((__unused__));
794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyfillin (yyGLRStackItem *yyvsp, int yylow0, int yylow1)
796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int i;
79805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yyGLRState *s = yyvsp[yylow0].yystate.yypred;
799cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (i = yylow0-1; i >= yylow1; i -= 1)
800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
801cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYASSERT (s->yyresolved);
802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyvsp[i].yystate.yyresolved = yytrue;
80305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyvsp[i].yystate.yysemantics.yysval = s->yysemantics.yysval;]b4_locations_if([[
80405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyvsp[i].yystate.yyloc = s->yyloc;]])[
805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      s = yyvsp[i].yystate.yypred = s->yypred;
806cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Do nothing if YYNORMAL or if *YYLOW <= YYLOW1.  Otherwise, fill in
810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project * YYVSP[YYLOW1 .. *YYLOW-1] as in yyfillin and set *YYLOW = YYLOW1.
811cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project * For convenience, always return YYLOW1.  */
812cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline int yyfill (yyGLRStackItem *, int *, int, yybool)
813cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     __attribute__ ((__unused__));
814cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline int
815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyyfill (yyGLRStackItem *yyvsp, int *yylow, int yylow1, yybool yynormal)
816cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
817cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (!yynormal && yylow1 < *yylow)
818cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
819cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyfillin (yyvsp, *yylow, yylow1);
820cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yylow = yylow1;
821cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
822cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yylow1;
823cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
824cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
825cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Perform user action for rule number YYN, with RHS length YYRHSLEN,
826cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  and top stack item YYVSP.  YYLVALP points to place to put semantic
827cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  value ($$), and yylocp points to place for location information
828cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  (@@$).  Returns yyok for normal return, yyaccept for YYACCEPT,
829cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  yyerr for YYERROR, yyabort for YYABORT.  */
830cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*ARGSUSED*/ static YYRESULTTAG
831cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyuserAction (yyRuleNum yyn, int yyrhslen, yyGLRStackItem* yyvsp,
83205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyGLRStack* yystackp,
83305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYSTYPE* yyvalp]b4_locuser_formals[)
834cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
835cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybool yynormal __attribute__ ((__unused__)) =
83605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    (yystackp->yysplitPoint == YY_NULL);
837cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yylow;
838cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_parse_param_use[]dnl
839cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[# undef yyerrok
840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define yyerrok (yystackp->yyerrState = 0)
841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYACCEPT
842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYACCEPT return yyaccept
843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYABORT
844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYABORT return yyabort
845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYERROR
846cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYERROR return yyerrok, yyerr
847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYRECOVERING
848cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYRECOVERING() (yystackp->yyerrState != 0)
849cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef yyclearin
850cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define yyclearin (yychar = YYEMPTY)
851cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYFILL
852cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYFILL(N) yyfill (yyvsp, &yylow, N, yynormal)
853cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYBACKUP
85405436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YYBACKUP(Token, Value)                                              \
855cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")),     \
85605436638acc7c010349a69c3395f1a57c642dc62Ying Wang         yyerrok, yyerr
857cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
858cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yylow = 1;
859cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yyrhslen == 0)
860cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    *yyvalp = yyval_default;
861cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
86205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    *yyvalp = yyvsp[YYFILL (1-yyrhslen)].yystate.yysemantics.yysval;]b4_locations_if([[
863cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYLLOC_DEFAULT ((*yylocp), (yyvsp - yyrhslen), yyrhslen);
86405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yyerror_range[1].yystate.yyloc = *yylocp;
865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]])[
866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  switch (yyn)
867cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
86805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      ]b4_user_actions[
869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      default: break;
870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyok;
873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef yyerrok
874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYABORT
875cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYACCEPT
876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYERROR
877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYBACKUP
878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef yyclearin
879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# undef YYRECOVERING
880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
882cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*ARGSUSED*/ static void
884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyuserMerge (int yyn, YYSTYPE* yy0, YYSTYPE* yy1)
885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYUSE (yy0);
887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYUSE (yy1);
888cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
889cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  switch (yyn)
890cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      ]b4_mergers[
892cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      default: break;
893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
894cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
895cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
89605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              /* Bison grammar-table manipulation.  */
897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_yydestruct_generate([b4_c_ansi_function_def])[
899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Number of symbols composing the right hand side of rule #RULE.  */
901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline int
902cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyrhsLength (yyRuleNum yyrule)
903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyr2[yyrule];
905cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyydestroyGLRState (char const *yymsg, yyGLRState *yys]b4_user_formals[)
909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yys->yyresolved)
911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yydestruct (yymsg, yystos[yys->yylrState],
91205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                &yys->yysemantics.yysval]b4_locuser_args([&yys->yyloc])[);
913cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
914cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
91505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
916cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yydebug)
91705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
91805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yys->yysemantics.yyfirstVal)
91905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYFPRINTF (stderr, "%s unresolved ", yymsg);
92005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
92105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYFPRINTF (stderr, "%s incomplete ", yymsg);
92205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yy_symbol_print (stderr, yystos[yys->yylrState],
92305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                           YY_NULL]b4_locuser_args([&yys->yyloc])[);
92405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYFPRINTF (stderr, "\n");
92505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yys->yysemantics.yyfirstVal)
92905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
93005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
93105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyGLRState *yyrh;
93205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yyn;
93305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
93405436638acc7c010349a69c3395f1a57c642dc62Ying Wang               yyn > 0;
93505436638acc7c010349a69c3395f1a57c642dc62Ying Wang               yyrh = yyrh->yypred, yyn -= 1)
93605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yydestroyGLRState (yymsg, yyrh]b4_user_args[);
93705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
939cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Left-hand-side symbol for rule #RULE.  */
942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yySymbol
943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyylhsNonterm (yyRuleNum yyrule)
944cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
945cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyr1[yyrule];
946cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
947cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
94805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yypact_value_is_default(Yystate) \
94905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]b4_table_value_equals([[pact]], [[Yystate]], [b4_pact_ninf])[
950cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
951cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** True iff LR state STATE has only a default reduction (regardless
952cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  of token).  */
953cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yybool
954cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyisDefaultedState (yyStateNum yystate)
955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
95605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  return yypact_value_is_default (yypact[yystate]);
957cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
958cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
959cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** The default reduction for STATE, assuming it has one.  */
960cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yyRuleNum
961cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyydefaultAction (yyStateNum yystate)
962cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
963cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yydefact[yystate];
964cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
965cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
96605436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define yytable_value_is_error(Yytable_value) \
96705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  ]b4_table_value_equals([[table]], [[Yytable_value]], [b4_table_ninf])[
968cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
969cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
970cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  Result R means
971cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *    R < 0:  Reduce on rule -R.
972cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *    R = 0:  Error.
973cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *    R > 0:  Shift to state R.
974cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  Set *CONFLICTS to a pointer into yyconfl to 0-terminated list of
975cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  conflicting reductions.
976cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project */
977cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline void
978cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyygetLRActions (yyStateNum yystate, int yytoken,
97905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                int* yyaction, const short int** yyconflicts)
980cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
981cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyindex = yypact[yystate] + yytoken;
98205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yypact_value_is_default (yypact[yystate])
98305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      || yyindex < 0 || YYLAST < yyindex || yycheck[yyindex] != yytoken)
984cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
985cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyaction = -yydefact[yystate];
986cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyconflicts = yyconfl;
987cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
98805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else if (! yytable_value_is_error (yytable[yyindex]))
989cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
990cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyaction = yytable[yyindex];
991cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyconflicts = yyconfl + yyconflp[yyindex];
992cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
993cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
994cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
995cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyaction = 0;
996cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyconflicts = yyconfl + yyconflp[yyindex];
997cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
998cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
999cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1000cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yyStateNum
1001cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyLRgotoState (yyStateNum yystate, yySymbol yylhs)
1002cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1003cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyr;
1004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyr = yypgoto[yylhs - YYNTOKENS] + yystate;
1005cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (0 <= yyr && yyr <= YYLAST && yycheck[yyr] == yystate)
1006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yytable[yyr];
1007cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1008cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yydefgoto[yylhs - YYNTOKENS];
1009cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1011cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yybool
1012cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyisShiftAction (int yyaction)
1013cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1014cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return 0 < yyaction;
1015cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1016cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1017cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yybool
1018cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyisErrorAction (int yyaction)
1019cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1020cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyaction == 0;
1021cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1022cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
102305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                /* GLRStates */
1024cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1025cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Return a fresh GLRStackItem.  Callers should call
1026cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project * YY_RESERVE_GLRSTACK afterwards to make sure there is sufficient
1027cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project * headroom.  */
1028cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1029cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline yyGLRStackItem*
1030cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyynewGLRStackItem (yyGLRStack* yystackp, yybool yyisState)
1031cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1032cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yynewItem = yystackp->yynextFree;
1033cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyspaceLeft -= 1;
1034cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yynextFree += 1;
1035cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewItem->yystate.yyisState = yyisState;
1036cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yynewItem;
1037cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1038cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1039cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Add a new semantic action that will execute the action for rule
1040cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  RULENUM on the semantic values in RHS to the list of
1041cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  alternative actions for STATE.  Assumes that RHS comes from
1042cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  stack #K of *STACKP. */
1043cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1044cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyaddDeferredAction (yyGLRStack* yystackp, size_t yyk, yyGLRState* yystate,
104505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     yyGLRState* rhs, yyRuleNum yyrule)
1046cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1047cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yySemanticOption* yynewOption =
1048cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    &yynewGLRStackItem (yystackp, yyfalse)->yyoption;
1049cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewOption->yystate = rhs;
1050cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewOption->yyrule = yyrule;
1051cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yystackp->yytops.yylookaheadNeeds[yyk])
1052cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1053cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yynewOption->yyrawchar = yychar;
105405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yynewOption->yyval = yylval;]b4_locations_if([
105505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yynewOption->yyloc = yylloc;])[
1056cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1057cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1058cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yynewOption->yyrawchar = YYEMPTY;
1059cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewOption->yynext = yystate->yysemantics.yyfirstVal;
1060cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystate->yysemantics.yyfirstVal = yynewOption;
1061cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1062cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YY_RESERVE_GLRSTACK (yystackp);
1063cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1064cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
106505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                /* GLRStacks */
1066cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1067cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Initialize SET to a singleton set containing an empty stack.  */
1068cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic yybool
1069cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyinitStateSet (yyGLRStateSet* yyset)
1070cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1071cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyset->yysize = 1;
1072cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyset->yycapacity = 16;
1073cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyset->yystates = (yyGLRState**) YYMALLOC (16 * sizeof yyset->yystates[0]);
1074cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (! yyset->yystates)
1075cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yyfalse;
107605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yyset->yystates[0] = YY_NULL;
1077cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyset->yylookaheadNeeds =
1078cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    (yybool*) YYMALLOC (16 * sizeof yyset->yylookaheadNeeds[0]);
1079cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (! yyset->yylookaheadNeeds)
1080cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1081cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYFREE (yyset->yystates);
1082cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      return yyfalse;
1083cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1084cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yytrue;
1085cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1086cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1087cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yyfreeStateSet (yyGLRStateSet* yyset)
1088cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1089cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFREE (yyset->yystates);
1090cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFREE (yyset->yylookaheadNeeds);
1091cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1092cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1093cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Initialize STACK to a single empty stack, with total maximum
1094cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  capacity for all stacks of SIZE.  */
1095cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic yybool
1096cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyinitGLRStack (yyGLRStack* yystackp, size_t yysize)
1097cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1098cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyerrState = 0;
1099cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynerrs = 0;
1100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyspaceLeft = yysize;
1101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyitems =
1102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    (yyGLRStackItem*) YYMALLOC (yysize * sizeof yystackp->yynextFree[0]);
1103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (!yystackp->yyitems)
1104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yyfalse;
1105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yynextFree = yystackp->yyitems;
110605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yysplitPoint = YY_NULL;
110705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yylastDeleted = YY_NULL;
1108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyinitStateSet (&yystackp->yytops);
1109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#if YYSTACKEXPANDABLE
1113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YYRELOC(YYFROMITEMS,YYTOITEMS,YYX,YYTYPE) \
1114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  &((YYTOITEMS) - ((YYFROMITEMS) - (yyGLRStackItem*) (YYX)))->YYTYPE
1115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** If STACK is expandable, extend it.  WARNING: Pointers into the
1117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    stack from outside should be considered invalid after this call.
1118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    We always expand when there are 1 or fewer items left AFTER an
1119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    allocation, so that we can avoid having external pointers exist
1120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    across an allocation.  */
1121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyexpandGLRStack (yyGLRStack* yystackp)
1123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yynewItems;
1125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yyp0, *yyp1;
112605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  size_t yynewSize;
1127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyn;
112805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  size_t yysize = yystackp->yynextFree - yystackp->yyitems;
1129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (YYMAXDEPTH - YYHEADROOM < yysize)
1130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyMemoryExhausted (yystackp);
1131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewSize = 2*yysize;
1132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (YYMAXDEPTH < yynewSize)
1133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yynewSize = YYMAXDEPTH;
1134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewItems = (yyGLRStackItem*) YYMALLOC (yynewSize * sizeof yynewItems[0]);
1135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (! yynewItems)
1136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyMemoryExhausted (yystackp);
1137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyp0 = yystackp->yyitems, yyp1 = yynewItems, yyn = yysize;
1138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       0 < yyn;
1139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yyn -= 1, yyp0 += 1, yyp1 += 1)
1140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      *yyp1 = *yyp0;
1142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (*(yybool *) yyp0)
114305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
114405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyGLRState* yys0 = &yyp0->yystate;
114505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyGLRState* yys1 = &yyp1->yystate;
114605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yys0->yypred != YY_NULL)
114705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yys1->yypred =
114805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYRELOC (yyp0, yyp1, yys0->yypred, yystate);
114905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (! yys0->yyresolved && yys0->yysemantics.yyfirstVal != YY_NULL)
115005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yys1->yysemantics.yyfirstVal =
115105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYRELOC (yyp0, yyp1, yys0->yysemantics.yyfirstVal, yyoption);
115205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
115405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
115505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySemanticOption* yyv0 = &yyp0->yyoption;
115605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySemanticOption* yyv1 = &yyp1->yyoption;
115705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyv0->yystate != YY_NULL)
115805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyv1->yystate = YYRELOC (yyp0, yyp1, yyv0->yystate, yystate);
115905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyv0->yynext != YY_NULL)
116005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyv1->yynext = YYRELOC (yyp0, yyp1, yyv0->yynext, yyoption);
116105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
116305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yysplitPoint != YY_NULL)
1164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystackp->yysplitPoint = YYRELOC (yystackp->yyitems, yynewItems,
116505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 yystackp->yysplitPoint, yystate);
1166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyn = 0; yyn < yystackp->yytops.yysize; yyn += 1)
116805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yystackp->yytops.yystates[yyn] != YY_NULL)
1169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates[yyn] =
117005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYRELOC (yystackp->yyitems, yynewItems,
117105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 yystackp->yytops.yystates[yyn], yystate);
1172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFREE (yystackp->yyitems);
1173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyitems = yynewItems;
1174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yynextFree = yynewItems + yysize;
1175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyspaceLeft = yynewSize - yysize;
1176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
1178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyfreeGLRStack (yyGLRStack* yystackp)
1181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFREE (yystackp->yyitems);
1183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyfreeStateSet (&yystackp->yytops);
1184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Assuming that S is a GLRState somewhere on STACK, update the
1187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  splitpoint of STACK, if needed, so that it is at least as deep as
1188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  S.  */
1189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline void
1190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyupdateSplit (yyGLRStack* yystackp, yyGLRState* yys)
1191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
119205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yysplitPoint != YY_NULL && yystackp->yysplitPoint > yys)
1193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystackp->yysplitPoint = yys;
1194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Invalidate stack #K in STACK.  */
1197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline void
1198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyymarkStackDeleted (yyGLRStack* yystackp, size_t yyk)
1199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
120005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yytops.yystates[yyk] != YY_NULL)
1201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystackp->yylastDeleted = yystackp->yytops.yystates[yyk];
120205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yytops.yystates[yyk] = YY_NULL;
1203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Undelete the last stack that was marked as deleted.  Can only be
1206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    done once after a deletion, and only when all other stacks have
1207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    been deleted.  */
1208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyundeleteLastStack (yyGLRStack* yystackp)
1210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
121105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yylastDeleted == YY_NULL || yystackp->yytops.yysize != 0)
1212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return;
1213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yystates[0] = yystackp->yylastDeleted;
1214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yysize = 1;
1215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYDPRINTF ((stderr, "Restoring last deleted stack as stack #0.\n"));
121605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yylastDeleted = YY_NULL;
1217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline void
1220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyremoveDeletes (yyGLRStack* yystackp)
1221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyi, yyj;
1223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyi = yyj = 0;
1224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  while (yyj < yystackp->yytops.yysize)
1225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
122605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (yystackp->yytops.yystates[yyi] == YY_NULL)
122705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
122805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyi == yyj)
122905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
123005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Removing dead stacks.\n"));
123105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
123205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yystackp->yytops.yysize -= 1;
123305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
123505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
123605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yystackp->yytops.yystates[yyj] = yystackp->yytops.yystates[yyi];
123705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          /* In the current implementation, it's unnecessary to copy
123805436638acc7c010349a69c3395f1a57c642dc62Ying Wang             yystackp->yytops.yylookaheadNeeds[yyi] since, after
123905436638acc7c010349a69c3395f1a57c642dc62Ying Wang             yyremoveDeletes returns, the parser immediately either enters
124005436638acc7c010349a69c3395f1a57c642dc62Ying Wang             deterministic operation or shifts a token.  However, it doesn't
124105436638acc7c010349a69c3395f1a57c642dc62Ying Wang             hurt, and the code might evolve to need it.  */
124205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yystackp->yytops.yylookaheadNeeds[yyj] =
124305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yystackp->yytops.yylookaheadNeeds[yyi];
124405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyj != yyi)
124505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
124605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Rename stack %lu -> %lu.\n",
124705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          (unsigned long int) yyi, (unsigned long int) yyj));
124805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
124905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyj += 1;
125005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyi += 1;
1252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Shift to a new state on stack #K of STACK, corresponding to LR state
1256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project * LRSTATE, at input position POSN, with (resolved) semantic value SVAL.  */
1257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline void
1258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyglrShift (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
125905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            size_t yyposn,
126005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYSTYPE* yyvalp]b4_locations_if([, YYLTYPE* yylocp])[)
1261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
1263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yylrState = yylrState;
1265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yyposn = yyposn;
1266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yyresolved = yytrue;
1267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yypred = yystackp->yytops.yystates[yyk];
126805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yynewState->yysemantics.yysval = *yyvalp;]b4_locations_if([
126905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yynewState->yyloc = *yylocp;])[
1270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yystates[yyk] = yynewState;
1271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YY_RESERVE_GLRSTACK (yystackp);
1273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Shift stack #K of YYSTACK, to a new state corresponding to LR
1276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  state YYLRSTATE, at input position YYPOSN, with the (unresolved)
1277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  semantic value of YYRHS under the action for YYRULE.  */
1278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline void
1279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyglrShiftDefer (yyGLRStack* yystackp, size_t yyk, yyStateNum yylrState,
128005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 size_t yyposn, yyGLRState* rhs, yyRuleNum yyrule)
1281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yynewState = &yynewGLRStackItem (yystackp, yytrue)->yystate;
1283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yylrState = yylrState;
1285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yyposn = yyposn;
1286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yyresolved = yyfalse;
1287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yynewState->yypred = yystackp->yytops.yystates[yyk];
128805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yynewState->yysemantics.yyfirstVal = YY_NULL;
1289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yystates[yyk] = yynewState;
1290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Invokes YY_RESERVE_GLRSTACK.  */
1292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyaddDeferredAction (yystackp, yyk, yynewState, rhs, yyrule);
1293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Pop the symbols consumed by reduction #RULE from the top of stack
1296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  #K of STACK, and perform the appropriate semantic action on their
1297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  semantic values.  Assumes that all ambiguities in semantic values
1298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  have been previously resolved.  Set *VALP to the resulting value,
1299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  and *LOCP to the computed location (if any).  Return value is as
1300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  for userAction.  */
1301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline YYRESULTTAG
1302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyydoAction (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
130305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYSTYPE* yyvalp]b4_locuser_formals[)
1304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yynrhs = yyrhsLength (yyrule);
1306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
130705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yysplitPoint == YY_NULL)
1308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      /* Standard special case: single stack.  */
1310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRStackItem* rhs = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
1311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYASSERT (yyk == 0);
1312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yynextFree -= yynrhs;
1313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yyspaceLeft += yynrhs;
1314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates[0] = & yystackp->yynextFree[-1].yystate;
131505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      return yyuserAction (yyrule, yynrhs, rhs, yystackp,
131605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                           yyvalp]b4_locuser_args[);
1317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      /* At present, doAction is never called in nondeterministic
1321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       * mode, so this branch is never taken.  It is here in
1322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       * anticipation of a future feature that will allow immediate
1323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       * evaluation of selected actions in nondeterministic mode.  */
1324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int yyi;
1325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState* yys;
1326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
1327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yys = yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred
132805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        = yystackp->yytops.yystates[yyk];]b4_locations_if([[
1329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yynrhs == 0)
133005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        /* Set default location.  */
133105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yys->yyloc;]])[
1332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (yyi = 0; yyi < yynrhs; yyi += 1)
133305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
133405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys = yys->yypred;
133505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYASSERT (yys);
133605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyupdateSplit (yystackp, yys);
1338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates[yyk] = yys;
1339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
134005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                           yystackp, yyvalp]b4_locuser_args[);
1341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
134405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if !]b4_api_PREFIX[DEBUG
1345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project# define YY_REDUCE_PRINT(Args)
1346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#else
134705436638acc7c010349a69c3395f1a57c642dc62Ying Wang# define YY_REDUCE_PRINT(Args)          \
134805436638acc7c010349a69c3395f1a57c642dc62Ying Wangdo {                                    \
134905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yydebug)                          \
135005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yy_reduce_print Args;               \
1351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} while (YYID (0))
1352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*----------------------------------------------------------.
1354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| Report that the RULE is going to be reduced on stack #K.  |
1355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`----------------------------------------------------------*/
1356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*ARGSUSED*/ static inline void
1358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyy_reduce_print (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
135905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 YYSTYPE* yyvalp]b4_locuser_formals[)
1360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yynrhs = yyrhsLength (yyrule);
1362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yybool yynormal __attribute__ ((__unused__)) =
136305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    (yystackp->yysplitPoint == YY_NULL);
1364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystackp->yytops.yystates[yyk];
1365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yylow = 1;
1366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyi;
136705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYUSE (yyvalp);]b4_locations_if([
136805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYUSE (yylocp);])[
1369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_parse_param_use[]dnl
1370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[  YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n",
137105436638acc7c010349a69c3395f1a57c642dc62Ying Wang             (unsigned long int) yyk, yyrule - 1,
137205436638acc7c010349a69c3395f1a57c642dc62Ying Wang             (unsigned long int) yyrline[yyrule]);
1373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* The symbols being reduced.  */
1374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyi = 0; yyi < yynrhs; yyi++)
1375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
137605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
1377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
137805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       &]b4_rhs_value(yynrhs, yyi + 1)[
137905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       ]b4_locations_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
138005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       b4_user_args[);
138105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, "\n");
1382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
1385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Pop items off stack #K of STACK according to grammar rule RULE,
1387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  and push back on the resulting nonterminal symbol.  Perform the
1388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  semantic action associated with RULE and store its value with the
1389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  newly pushed state, if FORCEEVAL or if STACK is currently
1390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  unambiguous.  Otherwise, store the deferred semantic action with
1391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  the new state.  If the new state would have an identical input
1392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  position, LR state, and predecessor to an existing state on the stack,
1393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  it is identified with that existing state, eliminating stack #K from
1394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  the STACK.  In this case, the (necessarily deferred) semantic value is
1395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  added to the options for the existing state's semantic value.
1396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project */
1397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline YYRESULTTAG
1398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyglrReduce (yyGLRStack* yystackp, size_t yyk, yyRuleNum yyrule,
139905436638acc7c010349a69c3395f1a57c642dc62Ying Wang             yybool yyforceEval]b4_user_formals[)
1400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyposn = yystackp->yytops.yystates[yyk]->yyposn;
1402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
140305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yyforceEval || yystackp->yysplitPoint == YY_NULL)
1404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
140505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYSTYPE yysval;]b4_locations_if([
140605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYLTYPE yyloc;])[
1407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
140805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YY_REDUCE_PRINT ((yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[));
140905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCHK (yydoAction (yystackp, yyk, yyrule, &yysval]b4_locuser_args([&yyloc])[));
1410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
1411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyglrShift (yystackp, yyk,
141205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyLRgotoState (yystackp->yytops.yystates[yyk]->yylrState,
141305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                 yylhsNonterm (yyrule)),
141405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyposn, &yysval]b4_locations_if([, &yyloc])[);
1415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      size_t yyi;
1419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int yyn;
1420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState* yys, *yys0 = yystackp->yytops.yystates[yyk];
1421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyStateNum yynewLRState;
1422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (yys = yystackp->yytops.yystates[yyk], yyn = yyrhsLength (yyrule);
142405436638acc7c010349a69c3395f1a57c642dc62Ying Wang           0 < yyn; yyn -= 1)
142505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
142605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys = yys->yypred;
142705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYASSERT (yys);
142805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyupdateSplit (yystackp, yys);
1430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yynewLRState = yyLRgotoState (yys->yylrState, yylhsNonterm (yyrule));
1431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYDPRINTF ((stderr,
143205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  "Reduced stack %lu by rule #%d; action deferred.  Now in state %d.\n",
143305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (unsigned long int) yyk, yyrule - 1, yynewLRState));
1434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
143505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yyi != yyk && yystackp->yytops.yystates[yyi] != YY_NULL)
143605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
143705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyGLRState *yysplit = yystackp->yysplitPoint;
143805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyGLRState *yyp = yystackp->yytops.yystates[yyi];
143905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            while (yyp != yys && yyp != yysplit && yyp->yyposn >= yyposn)
144005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              {
144105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                if (yyp->yylrState == yynewLRState && yyp->yypred == yys)
144205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  {
144305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yyaddDeferredAction (yystackp, yyk, yyp, yys0, yyrule);
144405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yymarkStackDeleted (yystackp, yyk);
144505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    YYDPRINTF ((stderr, "Merging stack %lu into stack %lu.\n",
144605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                (unsigned long int) yyk,
144705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                (unsigned long int) yyi));
144805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    return yyok;
144905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  }
145005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyp = yyp->yypred;
145105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              }
145205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
1453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates[yyk] = yys;
1454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyglrShiftDefer (yystackp, yyk, yynewLRState, yyposn, yys0, yyrule);
1455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyok;
1457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic size_t
1460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyysplitStack (yyGLRStack* yystackp, size_t yyk)
1461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
146205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yysplitPoint == YY_NULL)
1463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYASSERT (yyk == 0);
1465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yysplitPoint = yystackp->yytops.yystates[yyk];
1466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yystackp->yytops.yysize >= yystackp->yytops.yycapacity)
1468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState** yynewStates;
1470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yybool* yynewLookaheadNeeds;
1471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
147205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yynewStates = YY_NULL;
1473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yystackp->yytops.yycapacity
147505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          > (YYSIZEMAX / (2 * sizeof yynewStates[0])))
147605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyMemoryExhausted (yystackp);
1477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yycapacity *= 2;
1478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yynewStates =
148005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        (yyGLRState**) YYREALLOC (yystackp->yytops.yystates,
148105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  (yystackp->yytops.yycapacity
148205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   * sizeof yynewStates[0]));
148305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (yynewStates == YY_NULL)
148405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyMemoryExhausted (yystackp);
1485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates = yynewStates;
1486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yynewLookaheadNeeds =
148805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        (yybool*) YYREALLOC (yystackp->yytops.yylookaheadNeeds,
148905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                             (yystackp->yytops.yycapacity
149005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              * sizeof yynewLookaheadNeeds[0]));
149105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (yynewLookaheadNeeds == YY_NULL)
149205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyMemoryExhausted (yystackp);
1493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yylookaheadNeeds = yynewLookaheadNeeds;
1494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yystates[yystackp->yytops.yysize]
1496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    = yystackp->yytops.yystates[yyk];
1497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yylookaheadNeeds[yystackp->yytops.yysize]
1498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    = yystackp->yytops.yylookaheadNeeds[yyk];
1499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yytops.yysize += 1;
1500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yystackp->yytops.yysize-1;
1501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** True iff Y0 and Y1 represent identical options at the top level.
1504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  That is, they represent the same rule applied to RHS symbols
1505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  that produce the same terminal symbols.  */
1506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic yybool
1507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyidenticalOptions (yySemanticOption* yyy0, yySemanticOption* yyy1)
1508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yyy0->yyrule == yyy1->yyrule)
1510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState *yys0, *yys1;
1512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int yyn;
1513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
151405436638acc7c010349a69c3395f1a57c642dc62Ying Wang           yyn = yyrhsLength (yyy0->yyrule);
151505436638acc7c010349a69c3395f1a57c642dc62Ying Wang           yyn > 0;
151605436638acc7c010349a69c3395f1a57c642dc62Ying Wang           yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
151705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yys0->yyposn != yys1->yyposn)
151805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          return yyfalse;
1519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      return yytrue;
1520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return yyfalse;
1523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Assuming identicalOptions (Y0,Y1), destructively merge the
1526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  alternative semantic values for the RHS-symbols of Y1 and Y0.  */
1527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyymergeOptionSets (yySemanticOption* yyy0, yySemanticOption* yyy1)
1529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState *yys0, *yys1;
1531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyn;
1532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yys0 = yyy0->yystate, yys1 = yyy1->yystate,
1533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yyn = yyrhsLength (yyy0->yyrule);
1534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yyn > 0;
1535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yys0 = yys0->yypred, yys1 = yys1->yypred, yyn -= 1)
1536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yys0 == yys1)
153805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        break;
1539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else if (yys0->yyresolved)
154005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
154105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys1->yyresolved = yytrue;
154205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys1->yysemantics.yysval = yys0->yysemantics.yysval;
154305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else if (yys1->yyresolved)
154505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
154605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys0->yyresolved = yytrue;
154705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys0->yysemantics.yysval = yys1->yysemantics.yysval;
154805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
155005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
155105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySemanticOption** yyz0p = &yys0->yysemantics.yyfirstVal;
155205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySemanticOption* yyz1 = yys1->yysemantics.yyfirstVal;
155305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          while (YYID (yytrue))
155405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
155505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yyz1 == *yyz0p || yyz1 == YY_NULL)
155605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                break;
155705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              else if (*yyz0p == YY_NULL)
155805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
155905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  *yyz0p = yyz1;
156005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  break;
156105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
156205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              else if (*yyz0p < yyz1)
156305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
156405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yySemanticOption* yyz = *yyz0p;
156505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  *yyz0p = yyz1;
156605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyz1 = yyz1->yynext;
156705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (*yyz0p)->yynext = yyz;
156805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
156905436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyz0p = &(*yyz0p)->yynext;
157005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
157105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yys1->yysemantics.yyfirstVal = yys0->yysemantics.yyfirstVal;
157205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Y0 and Y1 represent two possible actions to take in a given
1577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  parsing state; return 0 if no combination is possible,
1578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  1 if user-mergeable, 2 if Y0 is preferred, 3 if Y1 is preferred.  */
1579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic int
1580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyypreference (yySemanticOption* y0, yySemanticOption* y1)
1581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyRuleNum r0 = y0->yyrule, r1 = y1->yyrule;
1583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int p0 = yydprec[r0], p1 = yydprec[r1];
1584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (p0 == p1)
1586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yymerger[r0] == 0 || yymerger[r0] != yymerger[r1])
158805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        return 0;
1589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
159005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        return 1;
1591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (p0 == 0 || p1 == 0)
1593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return 0;
1594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (p0 < p1)
1595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return 3;
1596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (p1 < p0)
1597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return 2;
1598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return 0;
1599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic YYRESULTTAG yyresolveValue (yyGLRState* yys,
160205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                   yyGLRStack* yystackp]b4_user_formals[);
1603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Resolve the previous N states starting at and including state S.  If result
1606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  != yyok, some states may have been left unresolved possibly with empty
1607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  semantic option chains.  Regardless of whether result = yyok, each state
1608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  has been left with consistent data so that yydestroyGLRState can be invoked
1609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  if necessary.  */
1610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic YYRESULTTAG
1611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyresolveStates (yyGLRState* yys, int yyn,
161205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 yyGLRStack* yystackp]b4_user_formals[)
1613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (0 < yyn)
1615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYASSERT (yys->yypred);
1617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYCHK (yyresolveStates (yys->yypred, yyn-1, yystackp]b4_user_args[));
1618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (! yys->yyresolved)
161905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYCHK (yyresolveValue (yys, yystackp]b4_user_args[));
1620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyok;
1622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Resolve the states for the RHS of OPT, perform its user action, and return
1625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  the semantic value and location.  Regardless of whether result = yyok, all
1626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  RHS states have been destroyed (assuming the user action destroys all RHS
1627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  semantic values if invoked).  */
1628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic YYRESULTTAG
1629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyresolveAction (yySemanticOption* yyopt, yyGLRStack* yystackp,
163005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 YYSTYPE* yyvalp]b4_locuser_formals[)
1631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem yyrhsVals[YYMAXRHS + YYMAXLEFT + 1];
163305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  int yynrhs = yyrhsLength (yyopt->yyrule);
163405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYRESULTTAG yyflag =
163505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyresolveStates (yyopt->yystate, yynrhs, yystackp]b4_user_args[);
1636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yyflag != yyok)
1637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState *yys;
1639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (yys = yyopt->yystate; yynrhs > 0; yys = yys->yypred, yynrhs -= 1)
164005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
1641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      return yyflag;
1642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyrhsVals[YYMAXRHS + YYMAXLEFT].yystate.yypred = yyopt->yystate;]b4_locations_if([[
1645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yynrhs == 0)
1646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* Set default location.  */
1647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyrhsVals[YYMAXRHS + YYMAXLEFT - 1].yystate.yyloc = yyopt->yystate->yyloc;]])[
164805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
164905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    int yychar_current = yychar;
165005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYSTYPE yylval_current = yylval;]b4_locations_if([
165105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYLTYPE yylloc_current = yylloc;])[
165205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yychar = yyopt->yyrawchar;
165305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yylval = yyopt->yyval;]b4_locations_if([
165405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yylloc = yyopt->yyloc;])[
165505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyflag = yyuserAction (yyopt->yyrule, yynrhs,
165605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                           yyrhsVals + YYMAXRHS + YYMAXLEFT - 1,
165705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                           yystackp, yyvalp]b4_locuser_args[);
165805436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yychar = yychar_current;
165905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yylval = yylval_current;]b4_locations_if([
166005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yylloc = yylloc_current;])[
166105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
1662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyflag;
1663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
166505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
1666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyreportTree (yySemanticOption* yyx, int yyindent)
1668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yynrhs = yyrhsLength (yyx->yyrule);
1670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyi;
1671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yys;
1672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yystates[1 + YYMAXRHS];
1673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState yyleftmost_state;
1674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyi = yynrhs, yys = yyx->yystate; 0 < yyi; yyi -= 1, yys = yys->yypred)
1676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystates[yyi] = yys;
167705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yys == YY_NULL)
1678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyleftmost_state.yyposn = 0;
1680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystates[0] = &yyleftmost_state;
1681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yystates[0] = yys;
1684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yyx->yystate->yyposn < yys->yyposn + 1)
1686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYFPRINTF (stderr, "%*s%s -> <Rule %d, empty>\n",
168705436638acc7c010349a69c3395f1a57c642dc62Ying Wang               yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
168805436638acc7c010349a69c3395f1a57c642dc62Ying Wang               yyx->yyrule - 1);
1689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
1690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    YYFPRINTF (stderr, "%*s%s -> <Rule %d, tokens %lu .. %lu>\n",
169105436638acc7c010349a69c3395f1a57c642dc62Ying Wang               yyindent, "", yytokenName (yylhsNonterm (yyx->yyrule)),
169205436638acc7c010349a69c3395f1a57c642dc62Ying Wang               yyx->yyrule - 1, (unsigned long int) (yys->yyposn + 1),
169305436638acc7c010349a69c3395f1a57c642dc62Ying Wang               (unsigned long int) yyx->yystate->yyposn);
1694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyi = 1; yyi <= yynrhs; yyi += 1)
1695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yystates[yyi]->yyresolved)
169705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
169805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yystates[yyi-1]->yyposn+1 > yystates[yyi]->yyposn)
169905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYFPRINTF (stderr, "%*s%s <empty>\n", yyindent+2, "",
170005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]));
170105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
170205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYFPRINTF (stderr, "%*s%s <tokens %lu .. %lu>\n", yyindent+2, "",
170305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       yytokenName (yyrhs[yyprhs[yyx->yyrule]+yyi-1]),
170405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       (unsigned long int) (yystates[yyi - 1]->yyposn + 1),
170505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       (unsigned long int) yystates[yyi]->yyposn);
170605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
170805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyreportTree (yystates[yyi]->yysemantics.yyfirstVal, yyindent+2);
1709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
1712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*ARGSUSED*/ static YYRESULTTAG
1714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyreportAmbiguity (yySemanticOption* yyx0,
171505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   yySemanticOption* yyx1]b4_pure_formals[)
1716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYUSE (yyx0);
1718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYUSE (yyx1);
1719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
172005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
1721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFPRINTF (stderr, "Ambiguity detected.\n");
1722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFPRINTF (stderr, "Option 1,\n");
1723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyreportTree (yyx0, 2);
1724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFPRINTF (stderr, "\nOption 2,\n");
1725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyreportTree (yyx1, 2);
1726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYFPRINTF (stderr, "\n");
1727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
1728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1729cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyerror (]b4_yyerror_args[YY_("syntax is ambiguous"));
1730cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyabort;
173105436638acc7c010349a69c3395f1a57c642dc62Ying Wang}]b4_locations_if([[
1732cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1733cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Starting at and including state S1, resolve the location for each of the
1734cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  previous N1 states that is unresolved.  The first semantic option of a state
1735cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  is always chosen.  */
1736cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1737cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyresolveLocations (yyGLRState* yys1, int yyn1,
173805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yyGLRStack *yystackp]b4_user_formals[)
1739cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1740cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (0 < yyn1)
1741cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1742cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyresolveLocations (yys1->yypred, yyn1 - 1, yystackp]b4_user_args[);
1743cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (!yys1->yyresolved)
174405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
174505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyGLRStackItem yyrhsloc[1 + YYMAXRHS];
174605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yynrhs;
174705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySemanticOption *yyoption = yys1->yysemantics.yyfirstVal;
174805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYASSERT (yyoption != YY_NULL);
174905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yynrhs = yyrhsLength (yyoption->yyrule);
175005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yynrhs > 0)
175105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
175205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyGLRState *yys;
175305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              int yyn;
175405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyresolveLocations (yyoption->yystate, yynrhs,
175505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  yystackp]b4_user_args[);
175605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              for (yys = yyoption->yystate, yyn = yynrhs;
175705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   yyn > 0;
175805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   yys = yys->yypred, yyn -= 1)
175905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyrhsloc[yyn].yystate.yyloc = yys->yyloc;
176005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
176105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
176205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
176305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              /* Both yyresolveAction and yyresolveLocations traverse the GSS
176405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 in reverse rightmost order.  It is only necessary to invoke
176505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 yyresolveLocations on a subforest for which yyresolveAction
176605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 would have been invoked next had an ambiguity not been
176705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 detected.  Thus the location of the previous state (but not
176805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 necessarily the previous state itself) is guaranteed to be
176905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 resolved already.  */
177005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyGLRState *yyprevious = yyoption->yystate;
177105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyrhsloc[0].yystate.yyloc = yyprevious->yyloc;
177205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
177305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
177405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            int yychar_current = yychar;
177505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYSTYPE yylval_current = yylval;
177605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYLTYPE yylloc_current = yylloc;
177705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yychar = yyoption->yyrawchar;
177805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yylval = yyoption->yyval;
177905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yylloc = yyoption->yyloc;
178005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYLLOC_DEFAULT ((yys1->yyloc), yyrhsloc, yynrhs);
178105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yychar = yychar_current;
178205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yylval = yylval_current;
178305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yylloc = yylloc_current;
178405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
178505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1786cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
178705436638acc7c010349a69c3395f1a57c642dc62Ying Wang}]])[
1788cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1789cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/** Resolve the ambiguity represented in state S, perform the indicated
1790cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  actions, and set the semantic value of S.  If result != yyok, the chain of
1791cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  semantic options in S has been cleared instead or it has been left
1792cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  unmodified except that redundant options may have been removed.  Regardless
1793cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  of whether result = yyok, S has been left with consistent data so that
1794cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project *  yydestroyGLRState can be invoked if necessary.  */
1795cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic YYRESULTTAG
1796cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyresolveValue (yyGLRState* yys, yyGLRStack* yystackp]b4_user_formals[)
1797cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1798cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yySemanticOption* yyoptionList = yys->yysemantics.yyfirstVal;
179905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yySemanticOption* yybest = yyoptionList;
1800cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yySemanticOption** yypp;
180105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yybool yymerge = yyfalse;
1802cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYSTYPE yysval;
180305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYRESULTTAG yyflag;]b4_locations_if([
180405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYLTYPE *yylocp = &yys->yyloc;])[
1805cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
180605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for (yypp = &yyoptionList->yynext; *yypp != YY_NULL; )
1807cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1808cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yySemanticOption* yyp = *yypp;
1809cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1810cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yyidenticalOptions (yybest, yyp))
181105436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
181205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yymergeOptionSets (yybest, yyp);
181305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          *yypp = yyp->yynext;
181405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1815cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
181605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
181705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          switch (yypreference (yybest, yyp))
181805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
181905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            case 0:]b4_locations_if([[
182005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyresolveLocations (yys, 1, yystackp]b4_user_args[);]])[
182105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              return yyreportAmbiguity (yybest, yyp]b4_pure_args[);
182205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
182305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            case 1:
182405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yymerge = yytrue;
182505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
182605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            case 2:
182705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
182805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            case 3:
182905436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yybest = yyp;
183005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yymerge = yyfalse;
183105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
183205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            default:
183305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              /* This cannot happen so it is not worth a YYASSERT (yyfalse),
183405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 but some compilers complain if the default case is
183505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 omitted.  */
183605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
183705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
183805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yypp = &yyp->yynext;
183905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1840cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1841cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1842cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yymerge)
1843cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1844cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yySemanticOption* yyp;
1845cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int yyprec = yydprec[yybest->yyrule];
184605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args[);
1847cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yyflag == yyok)
184805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        for (yyp = yybest->yynext; yyp != YY_NULL; yyp = yyp->yynext)
184905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
185005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yyprec == yydprec[yyp->yyrule])
185105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              {
185205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                YYSTYPE yysval_other;]b4_locations_if([
185305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                YYLTYPE yydummy;])[
185405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyflag = yyresolveAction (yyp, yystackp, &yysval_other]b4_locuser_args([&yydummy])[);
185505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                if (yyflag != yyok)
185605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  {
185705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yydestruct ("Cleanup: discarding incompletely merged value for",
185805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                yystos[yys->yylrState],
185905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                &yysval]b4_locuser_args[);
186005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    break;
186105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  }
186205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyuserMerge (yymerger[yyp->yyrule], &yysval, &yysval_other);
186305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              }
186405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
1865cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1866cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
186705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyflag = yyresolveAction (yybest, yystackp, &yysval]b4_locuser_args([yylocp])[);
1868cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1869cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yyflag == yyok)
1870cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1871cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yys->yyresolved = yytrue;
1872cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yys->yysemantics.yysval = yysval;
1873cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1874cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
187505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yys->yysemantics.yyfirstVal = YY_NULL;
1876cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyflag;
1877cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1878cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1879cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic YYRESULTTAG
1880cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyresolveStack (yyGLRStack* yystackp]b4_user_formals[)
1881cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
188205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yysplitPoint != YY_NULL)
1883cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1884cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState* yys;
1885cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      int yyn;
1886cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1887cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      for (yyn = 0, yys = yystackp->yytops.yystates[0];
188805436638acc7c010349a69c3395f1a57c642dc62Ying Wang           yys != yystackp->yysplitPoint;
188905436638acc7c010349a69c3395f1a57c642dc62Ying Wang           yys = yys->yypred, yyn += 1)
189005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        continue;
1891cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYCHK (yyresolveStates (yystackp->yytops.yystates[0], yyn, yystackp
189205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                             ]b4_user_args[));
1893cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1894cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyok;
1895cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1896cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1897cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
1898cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyycompressStack (yyGLRStack* yystackp)
1899cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1900cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRState* yyp, *yyq, *yyr;
1901cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
190205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yytops.yysize != 1 || yystackp->yysplitPoint == YY_NULL)
1903cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    return;
1904cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
190505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  for (yyp = yystackp->yytops.yystates[0], yyq = yyp->yypred, yyr = YY_NULL;
1906cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yyp != yystackp->yysplitPoint;
1907cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       yyr = yyp, yyp = yyq, yyq = yyp->yypred)
1908cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyp->yypred = yyr;
1909cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1910cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyspaceLeft += yystackp->yynextFree - yystackp->yyitems;
1911cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yynextFree = ((yyGLRStackItem*) yystackp->yysplitPoint) + 1;
1912cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyspaceLeft -= yystackp->yynextFree - yystackp->yyitems;
191305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yysplitPoint = YY_NULL;
191405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yystackp->yylastDeleted = YY_NULL;
1915cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
191605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  while (yyr != YY_NULL)
1917cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1918cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yynextFree->yystate = *yyr;
1919cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyr = yyr->yypred;
1920cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yynextFree->yystate.yypred = &yystackp->yynextFree[-1].yystate;
1921cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates[0] = &yystackp->yynextFree->yystate;
1922cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yynextFree += 1;
1923cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yyspaceLeft -= 1;
1924cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
1925cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
1926cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1927cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic YYRESULTTAG
1928cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyprocessOneStack (yyGLRStack* yystackp, size_t yyk,
192905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                   size_t yyposn]b4_pure_formals[)
1930cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
1931cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyaction;
1932cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  const short int* yyconflicts;
1933cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyRuleNum yyrule;
1934cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
193505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  while (yystackp->yytops.yystates[yyk] != YY_NULL)
1936cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
1937cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyStateNum yystate = yystackp->yytops.yystates[yyk]->yylrState;
1938cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYDPRINTF ((stderr, "Stack %lu Entering state %d\n",
193905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  (unsigned long int) yyk, yystate));
1940cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1941cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      YYASSERT (yystate != YYFINAL);
1942cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
1943cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yyisDefaultedState (yystate))
194405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
194505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyrule = yydefaultAction (yystate);
194605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyrule == 0)
194705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
194805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Stack %lu dies.\n",
194905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          (unsigned long int) yyk));
195005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yymarkStackDeleted (yystackp, yyk);
195105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              return yyok;
195205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
195305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYCHK (yyglrReduce (yystackp, yyk, yyrule, yyfalse]b4_user_args[));
195405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
1955cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
195605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
195705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySymbol yytoken;
195805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yystackp->yytops.yylookaheadNeeds[yyk] = yytrue;
195905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yychar == YYEMPTY)
196005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
196105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Reading a token: "));
196205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yychar = YYLEX;
196305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
196405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
196505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yychar <= YYEOF)
196605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
196705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yychar = yytoken = YYEOF;
196805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Now at end of input.\n"));
196905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
197005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
197105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
197205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yytoken = YYTRANSLATE (yychar);
197305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
197405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
197505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
197605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
197705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
197805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          while (*yyconflicts != 0)
197905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
198005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              size_t yynewStack = yysplitStack (yystackp, yyk);
198105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Splitting off stack %lu from %lu.\n",
198205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          (unsigned long int) yynewStack,
198305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          (unsigned long int) yyk));
198405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYCHK (yyglrReduce (yystackp, yynewStack,
198505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                  *yyconflicts, yyfalse]b4_user_args[));
198605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYCHK (yyprocessOneStack (yystackp, yynewStack,
198705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                        yyposn]b4_pure_args[));
198805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyconflicts += 1;
198905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
199005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
199105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyisShiftAction (yyaction))
199205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            break;
199305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else if (yyisErrorAction (yyaction))
199405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
199505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Stack %lu dies.\n",
199605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          (unsigned long int) yyk));
199705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yymarkStackDeleted (yystackp, yyk);
199805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
199905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
200005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
200105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYCHK (yyglrReduce (yystackp, yyk, -yyaction,
200205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                yyfalse]b4_user_args[));
200305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
2004cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
2005cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return yyok;
2006cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2007cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2008cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*ARGSUSED*/ static void
2009cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyreportSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
2010cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
201105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yyerrState != 0)
201205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    return;
201305436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ! YYERROR_VERBOSE
201405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yyerror (]b4_lyyerror_args[YY_("syntax error"));
201505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#else
201605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
201705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yySymbol yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
201805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  size_t yysize0 = yytnamerr (YY_NULL, yytokenName (yytoken));
201905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  size_t yysize = yysize0;
202005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yybool yysize_overflow = yyfalse;
202105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  char* yymsg = YY_NULL;
202205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
202305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* Internationalized format string. */
202405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  const char *yyformat = YY_NULL;
202505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* Arguments of yyformat. */
202605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
202705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* Number of reported tokens (one for the "unexpected", one per
202805436638acc7c010349a69c3395f1a57c642dc62Ying Wang     "expected").  */
202905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  int yycount = 0;
203005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
203105436638acc7c010349a69c3395f1a57c642dc62Ying Wang  /* There are many possibilities here to consider:
203205436638acc7c010349a69c3395f1a57c642dc62Ying Wang     - If this state is a consistent state with a default action, then
203305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       the only way this function was invoked is if the default action
203405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       is an error action.  In that case, don't check for expected
203505436638acc7c010349a69c3395f1a57c642dc62Ying Wang       tokens because there are none.
203605436638acc7c010349a69c3395f1a57c642dc62Ying Wang     - The only way there can be no lookahead present (in yychar) is if
203705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       this state is a consistent state with a default action.  Thus,
203805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       detecting the absence of a lookahead is sufficient to determine
203905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       that there is no unexpected or expected token to report.  In that
204005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       case, just report a simple "syntax error".
204105436638acc7c010349a69c3395f1a57c642dc62Ying Wang     - Don't assume there isn't a lookahead just because this state is a
204205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       consistent state with a default action.  There might have been a
204305436638acc7c010349a69c3395f1a57c642dc62Ying Wang       previous inconsistent state, consistent state with a non-default
204405436638acc7c010349a69c3395f1a57c642dc62Ying Wang       action, or user semantic action that manipulated yychar.
204505436638acc7c010349a69c3395f1a57c642dc62Ying Wang     - Of course, the expected token list depends on states to have
204605436638acc7c010349a69c3395f1a57c642dc62Ying Wang       correct lookahead information, and it depends on the parser not
204705436638acc7c010349a69c3395f1a57c642dc62Ying Wang       to perform extra reductions after fetching a lookahead from the
204805436638acc7c010349a69c3395f1a57c642dc62Ying Wang       scanner and before detecting a syntax error.  Thus, state merging
204905436638acc7c010349a69c3395f1a57c642dc62Ying Wang       (from LALR or IELR) and default reductions corrupt the expected
205005436638acc7c010349a69c3395f1a57c642dc62Ying Wang       token list.  However, the list is correct for canonical LR with
205105436638acc7c010349a69c3395f1a57c642dc62Ying Wang       one exception: it will still contain any token that will not be
205205436638acc7c010349a69c3395f1a57c642dc62Ying Wang       accepted due to an error action in a later state.
205305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  */
205405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yytoken != YYEMPTY)
2055cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
205605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      int yyn = yypact[yystackp->yytops.yystates[0]->yylrState];
205705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyarg[yycount++] = yytokenName (yytoken);
205805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (!yypact_value_is_default (yyn))
205905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
206005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          /* Start YYX at -YYN if negative to avoid negative indexes in
206105436638acc7c010349a69c3395f1a57c642dc62Ying Wang             YYCHECK.  In other words, skip the first -YYN actions for this
206205436638acc7c010349a69c3395f1a57c642dc62Ying Wang             state because they are default actions.  */
206305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yyxbegin = yyn < 0 ? -yyn : 0;
206405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          /* Stay within bounds of both yycheck and yytname.  */
206505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yychecklim = YYLAST - yyn + 1;
206605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
206705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yyx;
206805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
206905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
207005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                && !yytable_value_is_error (yytable[yyx + yyn]))
207105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              {
207205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
207305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  {
207405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yycount = 1;
207505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yysize = yysize0;
207605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    break;
207705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  }
207805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyarg[yycount++] = yytokenName (yyx);
207905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
208005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  size_t yysz = yysize + yytnamerr (YY_NULL, yytokenName (yyx));
208105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yysize_overflow |= yysz < yysize;
208205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yysize = yysz;
208305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
208405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              }
208505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
208605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
208705436638acc7c010349a69c3395f1a57c642dc62Ying Wang
208805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  switch (yycount)
208905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
209005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYCASE_(N, S)                   \
209105436638acc7c010349a69c3395f1a57c642dc62Ying Wang      case N:                           \
209205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyformat = S;                   \
209305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      break
209405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCASE_(0, YY_("syntax error"));
209505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCASE_(1, YY_("syntax error, unexpected %s"));
209605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
209705436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
209805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
209905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
210005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#undef YYCASE_
2101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
210205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
210305436638acc7c010349a69c3395f1a57c642dc62Ying Wang  {
210405436638acc7c010349a69c3395f1a57c642dc62Ying Wang    size_t yysz = yysize + strlen (yyformat);
210505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yysize_overflow |= yysz < yysize;
210605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yysize = yysz;
210705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
210805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
210905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (!yysize_overflow)
211005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yymsg = (char *) YYMALLOC (yysize);
211105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
211205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yymsg)
211305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
211405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      char *yyp = yymsg;
211505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      int yyi = 0;
211605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      while ((*yyp = *yyformat))
211705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
211805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
211905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
212005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyp += yytnamerr (yyp, yyarg[yyi++]);
212105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyformat += 2;
212205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
212305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
212405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
212505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyp++;
212605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyformat++;
212705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
212805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
212905436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyerror (]b4_lyyerror_args[yymsg);
213005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFREE (yymsg);
213105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
213205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  else
213305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    {
213405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyerror (]b4_lyyerror_args[YY_("syntax error"));
213505436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yyMemoryExhausted (yystackp);
213605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }
213705436638acc7c010349a69c3395f1a57c642dc62Ying Wang  }
213805436638acc7c010349a69c3395f1a57c642dc62Ying Wang#endif /* YYERROR_VERBOSE */
213905436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yynerrs += 1;
2140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Recover from a syntax error on *YYSTACKP, assuming that *YYSTACKP->YYTOKENP,
2143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project   yylval, and yylloc are the syntactic category, semantic value, and location
214405436638acc7c010349a69c3395f1a57c642dc62Ying Wang   of the lookahead.  */
2145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*ARGSUSED*/ static void
2146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source ProjectyyrecoverSyntaxError (yyGLRStack* yystackp]b4_user_formals[)
2147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
2148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyk;
2149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyj;
2150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yystackp->yyerrState == 3)
2152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    /* We just shifted the error token and (perhaps) took some
2153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project       reductions.  Skip tokens until we can proceed.  */
2154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    while (YYID (yytrue))
2155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      {
215605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yySymbol yytoken;
215705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yychar == YYEOF)
215805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyFail (yystackp][]b4_lpure_args[, YY_NULL);
215905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yychar != YYEMPTY)
216005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {]b4_locations_if([[
216105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            /* We throw away the lookahead, but the error range
216205436638acc7c010349a69c3395f1a57c642dc62Ying Wang               of the shifted error token must take it into account.  */
216305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyGLRState *yys = yystackp->yytops.yystates[0];
216405436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyGLRStackItem yyerror_range[3];
216505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyerror_range[1].yystate.yyloc = yys->yyloc;
216605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yyerror_range[2].yystate.yyloc = yylloc;
216705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYLLOC_DEFAULT ((yys->yyloc), yyerror_range, 2);]])[
216805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yytoken = YYTRANSLATE (yychar);
216905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yydestruct ("Error: discarding",
217005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                        yytoken, &yylval]b4_locuser_args([&yylloc])[);
217105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
217205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        YYDPRINTF ((stderr, "Reading a token: "));
217305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yychar = YYLEX;
217405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yychar <= YYEOF)
217505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
217605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yychar = yytoken = YYEOF;
217705436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYDPRINTF ((stderr, "Now at end of input.\n"));
217805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
217905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        else
218005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
218105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yytoken = YYTRANSLATE (yychar);
218205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
218305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
218405436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyj = yypact[yystackp->yytops.yystates[0]->yylrState];
218505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yypact_value_is_default (yyj))
218605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          return;
218705436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yyj += yytoken;
218805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        if (yyj < 0 || YYLAST < yyj || yycheck[yyj] != yytoken)
218905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          {
219005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yydefact[yystackp->yytops.yystates[0]->yylrState] != 0)
219105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              return;
219205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          }
219305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        else if (! yytable_value_is_error (yytable[yyj]))
219405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          return;
2195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      }
2196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Reduce to one stack.  */
2198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyk = 0; yyk < yystackp->yytops.yysize; yyk += 1)
219905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    if (yystackp->yytops.yystates[yyk] != YY_NULL)
2200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      break;
2201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yyk >= yystackp->yytops.yysize)
220205436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyFail (yystackp][]b4_lpure_args[, YY_NULL);
2203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyk += 1; yyk < yystackp->yytops.yysize; yyk += 1)
2204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yymarkStackDeleted (yystackp, yyk);
2205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyremoveDeletes (yystackp);
2206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yycompressStack (yystackp);
2207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Now pop stack until we find a state that shifts the error token.  */
2209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yystackp->yyerrState = 3;
221005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  while (yystackp->yytops.yystates[0] != YY_NULL)
2211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
2212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState *yys = yystackp->yytops.yystates[0];
2213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyj = yypact[yys->yylrState];
221405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (! yypact_value_is_default (yyj))
221505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
221605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyj += YYTERROR;
221705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (0 <= yyj && yyj <= YYLAST && yycheck[yyj] == YYTERROR
221805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              && yyisShiftAction (yytable[yyj]))
221905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
222005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              /* Shift the error token.  */]b4_locations_if([[
222105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              /* First adjust its location.*/
222205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYLTYPE yyerrloc;
222305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yystackp->yyerror_range[2].yystate.yyloc = yylloc;
222405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYLLOC_DEFAULT (yyerrloc, (yystackp->yyerror_range), 2);]])[
222505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YY_SYMBOL_PRINT ("Shifting", yystos[yytable[yyj]],
222605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                               &yylval, &yyerrloc);
222705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyglrShift (yystackp, 0, yytable[yyj],
222805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          yys->yyposn, &yylval]b4_locations_if([, &yyerrloc])[);
222905436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yys = yystackp->yytops.yystates[0];
223005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
223105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
223205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }]b4_locations_if([[
223305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      yystackp->yyerror_range[1].yystate.yyloc = yys->yyloc;]])[
223405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      if (yys->yypred != YY_NULL)
223505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        yydestroyGLRState ("Error: popping", yys]b4_user_args[);
2236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yytops.yystates[0] = yys->yypred;
2237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yynextFree -= 1;
2238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yystackp->yyspaceLeft += 1;
2239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
224005436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yystackp->yytops.yystates[0] == YY_NULL)
224105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    yyFail (yystackp][]b4_lpure_args[, YY_NULL);
2242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
224405436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYCHK1(YYE)                                                          \
224505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  do {                                                                       \
224605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    switch (YYE) {                                                           \
224705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    case yyok:                                                               \
224805436638acc7c010349a69c3395f1a57c642dc62Ying Wang      break;                                                                 \
224905436638acc7c010349a69c3395f1a57c642dc62Ying Wang    case yyabort:                                                            \
225005436638acc7c010349a69c3395f1a57c642dc62Ying Wang      goto yyabortlab;                                                       \
225105436638acc7c010349a69c3395f1a57c642dc62Ying Wang    case yyaccept:                                                           \
225205436638acc7c010349a69c3395f1a57c642dc62Ying Wang      goto yyacceptlab;                                                      \
225305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    case yyerr:                                                              \
225405436638acc7c010349a69c3395f1a57c642dc62Ying Wang      goto yyuser_error;                                                     \
225505436638acc7c010349a69c3395f1a57c642dc62Ying Wang    default:                                                                 \
225605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      goto yybuglab;                                                         \
225705436638acc7c010349a69c3395f1a57c642dc62Ying Wang    }                                                                        \
2258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  } while (YYID (0))
2259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/*----------.
2262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project| yyparse.  |
2263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project`----------*/
2264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project]b4_c_ansi_function_def([yyparse], [int], b4_parse_param)[
2266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
2267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  int yyresult;
2268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStack yystack;
2269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStack* const yystackp = &yystack;
2270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyposn;
2271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYDPRINTF ((stderr, "Starting parse\n"));
2273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yychar = YYEMPTY;
227505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yylval = yyval_default;]b4_locations_if([
227605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yylloc = yyloc_default;])[
227705436638acc7c010349a69c3395f1a57c642dc62Ying Wang]m4_ifdef([b4_initial_action], [
227805436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_dollar_pushdef([yylval], [], [yylloc])dnl
227905436638acc7c010349a69c3395f1a57c642dc62Ying Wang/* User initialization code.  */
228005436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_user_initial_action
228105436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_dollar_popdef])[]dnl
2282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project[
2283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (! yyinitGLRStack (yystackp, YYINITDEPTH))
2284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    goto yyexhaustedlab;
2285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  switch (YYSETJMP (yystack.yyexception_buffer))
2286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
2287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case 0: break;
2288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case 1: goto yyabortlab;
2289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    case 2: goto yyexhaustedlab;
2290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    default: goto yybuglab;
2291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
229205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  yyglrShift (&yystack, 0, 0, 0, &yylval]b4_locations_if([, &yylloc])[);
2293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyposn = 0;
2294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  while (YYID (yytrue))
2296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
2297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      /* For efficiency, we have two loops, the first of which is
229805436638acc7c010349a69c3395f1a57c642dc62Ying Wang         specialized to deterministic operation (single stack, no
229905436638acc7c010349a69c3395f1a57c642dc62Ying Wang         potential ambiguity).  */
2300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      /* Standard mode */
2301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      while (YYID (yytrue))
230205436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
230305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyRuleNum yyrule;
230405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          int yyaction;
230505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          const short int* yyconflicts;
230605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
230705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyStateNum yystate = yystack.yytops.yystates[0]->yylrState;
230805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYDPRINTF ((stderr, "Entering state %d\n", yystate));
230905436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yystate == YYFINAL)
231005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            goto yyacceptlab;
231105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yyisDefaultedState (yystate))
231205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
231305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyrule = yydefaultAction (yystate);
231405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yyrule == 0)
231505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
231605436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_locations_if([[               yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
231705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyreportSyntaxError (&yystack]b4_user_args[);
231805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  goto yyuser_error;
231905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
232005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYCHK1 (yyglrReduce (&yystack, 0, yyrule, yytrue]b4_user_args[));
232105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
232205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          else
232305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
232405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yySymbol yytoken;
232505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yychar == YYEMPTY)
232605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
232705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  YYDPRINTF ((stderr, "Reading a token: "));
232805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yychar = YYLEX;
232905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
233005436638acc7c010349a69c3395f1a57c642dc62Ying Wang
233105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yychar <= YYEOF)
233205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
233305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yychar = yytoken = YYEOF;
233405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  YYDPRINTF ((stderr, "Now at end of input.\n"));
233505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
233605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              else
233705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
233805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yytoken = YYTRANSLATE (yychar);
233905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
234005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
234105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
234205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yygetLRActions (yystate, yytoken, &yyaction, &yyconflicts);
234305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (*yyconflicts != 0)
234405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                break;
234505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yyisShiftAction (yyaction))
234605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
234705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
234805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yychar = YYEMPTY;
234905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyposn += 1;
235005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyglrShift (&yystack, 0, yyaction, yyposn, &yylval]b4_locations_if([, &yylloc])[);
235105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  if (0 < yystack.yyerrState)
235205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yystack.yyerrState -= 1;
235305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
235405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              else if (yyisErrorAction (yyaction))
235505436638acc7c010349a69c3395f1a57c642dc62Ying Wang                {
235605436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_locations_if([[               yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
235705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  yyreportSyntaxError (&yystack]b4_user_args[);
235805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  goto yyuser_error;
235905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                }
236005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              else
236105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                YYCHK1 (yyglrReduce (&yystack, 0, -yyaction, yytrue]b4_user_args[));
236205436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
236305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
2364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      while (YYID (yytrue))
236605436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
236705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yySymbol yytoken_to_shift;
236805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          size_t yys;
236905436638acc7c010349a69c3395f1a57c642dc62Ying Wang
237005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
237105436638acc7c010349a69c3395f1a57c642dc62Ying Wang            yystackp->yytops.yylookaheadNeeds[yys] = yychar != YYEMPTY;
237205436638acc7c010349a69c3395f1a57c642dc62Ying Wang
237305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          /* yyprocessOneStack returns one of three things:
237405436638acc7c010349a69c3395f1a57c642dc62Ying Wang
237505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              - An error flag.  If the caller is yyprocessOneStack, it
237605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                immediately returns as well.  When the caller is finally
237705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyparse, it jumps to an error label via YYCHK1.
237805436638acc7c010349a69c3395f1a57c642dc62Ying Wang
237905436638acc7c010349a69c3395f1a57c642dc62Ying Wang              - yyok, but yyprocessOneStack has invoked yymarkStackDeleted
238005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                (&yystack, yys), which sets the top state of yys to NULL.  Thus,
238105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyparse's following invocation of yyremoveDeletes will remove
238205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                the stack.
238305436638acc7c010349a69c3395f1a57c642dc62Ying Wang
238405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              - yyok, when ready to shift a token.
238505436638acc7c010349a69c3395f1a57c642dc62Ying Wang
238605436638acc7c010349a69c3395f1a57c642dc62Ying Wang             Except in the first case, yyparse will invoke yyremoveDeletes and
238705436638acc7c010349a69c3395f1a57c642dc62Ying Wang             then shift the next token onto all remaining stacks.  This
238805436638acc7c010349a69c3395f1a57c642dc62Ying Wang             synchronization of the shift (that is, after all preceding
238905436638acc7c010349a69c3395f1a57c642dc62Ying Wang             reductions on all stacks) helps prevent double destructor calls
239005436638acc7c010349a69c3395f1a57c642dc62Ying Wang             on yylval in the event of memory exhaustion.  */
239105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
239205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
239305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYCHK1 (yyprocessOneStack (&yystack, yys, yyposn]b4_lpure_args[));
239405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyremoveDeletes (&yystack);
239505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yystack.yytops.yysize == 0)
239605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
239705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyundeleteLastStack (&yystack);
239805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              if (yystack.yytops.yysize == 0)
239905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                yyFail (&yystack][]b4_lpure_args[, YY_("syntax error"));
240005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
240105436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
240205436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_locations_if([[           yystack.yyerror_range[1].yystate.yyloc = yylloc;]])[
240305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyreportSyntaxError (&yystack]b4_user_args[);
240405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              goto yyuser_error;
240505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
240605436638acc7c010349a69c3395f1a57c642dc62Ying Wang
240705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          /* If any yyglrShift call fails, it will fail after shifting.  Thus,
240805436638acc7c010349a69c3395f1a57c642dc62Ying Wang             a copy of yylval will already be on stack 0 in the event of a
240905436638acc7c010349a69c3395f1a57c642dc62Ying Wang             failure in the following loop.  Thus, yychar is set to YYEMPTY
241005436638acc7c010349a69c3395f1a57c642dc62Ying Wang             before the loop to make sure the user destructor for yylval isn't
241105436638acc7c010349a69c3395f1a57c642dc62Ying Wang             called twice.  */
241205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yytoken_to_shift = YYTRANSLATE (yychar);
241305436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yychar = YYEMPTY;
241405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          yyposn += 1;
241505436638acc7c010349a69c3395f1a57c642dc62Ying Wang          for (yys = 0; yys < yystack.yytops.yysize; yys += 1)
241605436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
241705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              int yyaction;
241805436638acc7c010349a69c3395f1a57c642dc62Ying Wang              const short int* yyconflicts;
241905436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyStateNum yystate = yystack.yytops.yystates[yys]->yylrState;
242005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yygetLRActions (yystate, yytoken_to_shift, &yyaction,
242105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                              &yyconflicts);
242205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              /* Note that yyconflicts were handled by yyprocessOneStack.  */
242305436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "On stack %lu, ", (unsigned long int) yys));
242405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YY_SYMBOL_PRINT ("shifting", yytoken_to_shift, &yylval, &yylloc);
242505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yyglrShift (&yystack, yys, yyaction, yyposn,
242605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          &yylval]b4_locations_if([, &yylloc])[);
242705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Stack %lu now in state #%d\n",
242805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          (unsigned long int) yys,
242905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                          yystack.yytops.yystates[yys]->yylrState));
243005436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
243105436638acc7c010349a69c3395f1a57c642dc62Ying Wang
243205436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (yystack.yytops.yysize == 1)
243305436638acc7c010349a69c3395f1a57c642dc62Ying Wang            {
243405436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYCHK1 (yyresolveStack (&yystack]b4_user_args[));
243505436638acc7c010349a69c3395f1a57c642dc62Ying Wang              YYDPRINTF ((stderr, "Returning to deterministic operation.\n"));
243605436638acc7c010349a69c3395f1a57c642dc62Ying Wang              yycompressStack (&yystack);
243705436638acc7c010349a69c3395f1a57c642dc62Ying Wang              break;
243805436638acc7c010349a69c3395f1a57c642dc62Ying Wang            }
243905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
2440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      continue;
2441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yyuser_error:
2442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyrecoverSyntaxError (&yystack]b4_user_args[);
2443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyposn = yystack.yytops.yystates[0]->yyposn;
2444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
2445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yyacceptlab:
2447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyresult = 0;
2448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  goto yyreturn;
2449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yybuglab:
2451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  YYASSERT (yyfalse);
2452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  goto yyabortlab;
2453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yyabortlab:
2455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyresult = 1;
2456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  goto yyreturn;
2457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yyexhaustedlab:
2459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyerror (]b4_lyyerror_args[YY_("memory exhausted"));
2460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyresult = 2;
2461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  goto yyreturn;
2462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project yyreturn:
246405436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yychar != YYEMPTY)
2465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yydestruct ("Cleanup: discarding lookahead",
246605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                YYTRANSLATE (yychar), &yylval]b4_locuser_args([&yylloc])[);
2467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* If the stack is well-formed, pop the stack until it is empty,
2469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     destroying its entries as we go.  But free the stack regardless
2470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project     of whether it is well-formed.  */
2471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yystack.yyitems)
2472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
2473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyGLRState** yystates = yystack.yytops.yystates;
2474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (yystates)
247505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
247605436638acc7c010349a69c3395f1a57c642dc62Ying Wang          size_t yysize = yystack.yytops.yysize;
247705436638acc7c010349a69c3395f1a57c642dc62Ying Wang          size_t yyk;
247805436638acc7c010349a69c3395f1a57c642dc62Ying Wang          for (yyk = 0; yyk < yysize; yyk += 1)
247905436638acc7c010349a69c3395f1a57c642dc62Ying Wang            if (yystates[yyk])
248005436638acc7c010349a69c3395f1a57c642dc62Ying Wang              {
248105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                while (yystates[yyk])
248205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  {
248305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yyGLRState *yys = yystates[yyk];
248405436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_locations_if([[                 yystack.yyerror_range[1].yystate.yyloc = yys->yyloc;]]
248505436638acc7c010349a69c3395f1a57c642dc62Ying Wang)[                  if (yys->yypred != YY_NULL)
248605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                      yydestroyGLRState ("Cleanup: popping", yys]b4_user_args[);
248705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yystates[yyk] = yys->yypred;
248805436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yystack.yynextFree -= 1;
248905436638acc7c010349a69c3395f1a57c642dc62Ying Wang                    yystack.yyspaceLeft += 1;
249005436638acc7c010349a69c3395f1a57c642dc62Ying Wang                  }
249105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                break;
249205436638acc7c010349a69c3395f1a57c642dc62Ying Wang              }
249305436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
2494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yyfreeGLRStack (&yystack);
2495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
2496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  /* Make sure YYID is used.  */
2498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  return YYID (yyresult);
2499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DEBUGGING ONLY */
250205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#if ]b4_api_PREFIX[DEBUG
2503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yypstack (yyGLRStack* yystackp, size_t yyk)
2504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  __attribute__ ((__unused__));
2505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void yypdumpstack (yyGLRStack* yystackp) __attribute__ ((__unused__));
2506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
2508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyy_yypstack (yyGLRState* yys)
2509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
2510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  if (yys->yypred)
2511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
2512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      yy_yypstack (yys->yypred);
251305436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, " -> ");
2514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
251505436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYFPRINTF (stderr, "%d@@%lu", yys->yylrState,
251605436638acc7c010349a69c3395f1a57c642dc62Ying Wang             (unsigned long int) yys->yyposn);
2517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
2520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyypstates (yyGLRState* yyst)
2521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
252205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  if (yyst == YY_NULL)
252305436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYFPRINTF (stderr, "<null>");
2524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  else
2525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    yy_yypstack (yyst);
252605436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYFPRINTF (stderr, "\n");
2527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
2530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyypstack (yyGLRStack* yystackp, size_t yyk)
2531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
2532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yypstates (yystackp->yytops.yystates[yyk]);
2533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
253505436638acc7c010349a69c3395f1a57c642dc62Ying Wang#define YYINDEX(YYX)                                                         \
253605436638acc7c010349a69c3395f1a57c642dc62Ying Wang    ((YYX) == YY_NULL ? -1 : (yyGLRStackItem*) (YYX) - yystackp->yyitems)
2537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
2539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void
2540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectyypdumpstack (yyGLRStack* yystackp)
2541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{
2542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  yyGLRStackItem* yyp;
2543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  size_t yyi;
2544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyp = yystackp->yyitems; yyp < yystackp->yynextFree; yyp += 1)
2545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    {
254605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, "%3lu. ",
254705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                 (unsigned long int) (yyp - yystackp->yyitems));
2548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      if (*(yybool *) yyp)
254905436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
255005436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYFPRINTF (stderr, "Res: %d, LR State: %d, posn: %lu, pred: %ld",
255105436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     yyp->yystate.yyresolved, yyp->yystate.yylrState,
255205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     (unsigned long int) yyp->yystate.yyposn,
255305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     (long int) YYINDEX (yyp->yystate.yypred));
255405436638acc7c010349a69c3395f1a57c642dc62Ying Wang          if (! yyp->yystate.yyresolved)
255505436638acc7c010349a69c3395f1a57c642dc62Ying Wang            YYFPRINTF (stderr, ", firstVal: %ld",
255605436638acc7c010349a69c3395f1a57c642dc62Ying Wang                       (long int) YYINDEX (yyp->yystate
255705436638acc7c010349a69c3395f1a57c642dc62Ying Wang                                             .yysemantics.yyfirstVal));
255805436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
2559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project      else
256005436638acc7c010349a69c3395f1a57c642dc62Ying Wang        {
256105436638acc7c010349a69c3395f1a57c642dc62Ying Wang          YYFPRINTF (stderr, "Option. rule: %d, state: %ld, next: %ld",
256205436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     yyp->yyoption.yyrule - 1,
256305436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     (long int) YYINDEX (yyp->yyoption.yystate),
256405436638acc7c010349a69c3395f1a57c642dc62Ying Wang                     (long int) YYINDEX (yyp->yyoption.yynext));
256505436638acc7c010349a69c3395f1a57c642dc62Ying Wang        }
256605436638acc7c010349a69c3395f1a57c642dc62Ying Wang      YYFPRINTF (stderr, "\n");
2567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project    }
256805436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYFPRINTF (stderr, "Tops:");
2569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project  for (yyi = 0; yyi < yystackp->yytops.yysize; yyi += 1)
257005436638acc7c010349a69c3395f1a57c642dc62Ying Wang    YYFPRINTF (stderr, "%lu: %ld; ", (unsigned long int) yyi,
257105436638acc7c010349a69c3395f1a57c642dc62Ying Wang               (long int) YYINDEX (yystackp->yytops.yystates[yyi]));
257205436638acc7c010349a69c3395f1a57c642dc62Ying Wang  YYFPRINTF (stderr, "\n");
2573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}
2574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif
257505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_epilogue[]dnl
257605436638acc7c010349a69c3395f1a57c642dc62Ying Wangb4_output_end()
2577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
257805436638acc7c010349a69c3395f1a57c642dc62Ying Wang# glr.cc produces its own header.
257905436638acc7c010349a69c3395f1a57c642dc62Ying Wangm4_if(b4_skeleton, ["glr.c"],
258005436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_defines_if(
258105436638acc7c010349a69c3395f1a57c642dc62Ying Wang[b4_output_begin([b4_spec_defines_file])
2582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectb4_copyright([Skeleton interface for Bison GLR parsers in C],
258305436638acc7c010349a69c3395f1a57c642dc62Ying Wang             [2002-2012])[
2584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project
258505436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_cpp_guard_open([b4_spec_defines_file])[
258605436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_shared_declarations[
258705436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_cpp_guard_close([b4_spec_defines_file])[
258805436638acc7c010349a69c3395f1a57c642dc62Ying Wang]b4_output_end()
258905436638acc7c010349a69c3395f1a57c642dc62Ying Wang])])
2590