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