1*cda5da8dSAndroid Build Coastguard Worker -*- Autoconf -*- 2*cda5da8dSAndroid Build Coastguard Worker 3*cda5da8dSAndroid Build Coastguard Worker# C M4 Macros for Bison. 4*cda5da8dSAndroid Build Coastguard Worker 5*cda5da8dSAndroid Build Coastguard Worker# Copyright (C) 2002, 2004-2015, 2018-2021 Free Software Foundation, 6*cda5da8dSAndroid Build Coastguard Worker# Inc. 7*cda5da8dSAndroid Build Coastguard Worker 8*cda5da8dSAndroid Build Coastguard Worker# This program is free software: you can redistribute it and/or modify 9*cda5da8dSAndroid Build Coastguard Worker# it under the terms of the GNU General Public License as published by 10*cda5da8dSAndroid Build Coastguard Worker# the Free Software Foundation, either version 3 of the License, or 11*cda5da8dSAndroid Build Coastguard Worker# (at your option) any later version. 12*cda5da8dSAndroid Build Coastguard Worker# 13*cda5da8dSAndroid Build Coastguard Worker# This program is distributed in the hope that it will be useful, 14*cda5da8dSAndroid Build Coastguard Worker# but WITHOUT ANY WARRANTY; without even the implied warranty of 15*cda5da8dSAndroid Build Coastguard Worker# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*cda5da8dSAndroid Build Coastguard Worker# GNU General Public License for more details. 17*cda5da8dSAndroid Build Coastguard Worker# 18*cda5da8dSAndroid Build Coastguard Worker# You should have received a copy of the GNU General Public License 19*cda5da8dSAndroid Build Coastguard Worker# along with this program. If not, see <https://www.gnu.org/licenses/>. 20*cda5da8dSAndroid Build Coastguard Worker 21*cda5da8dSAndroid Build Coastguard Workerm4_include(b4_skeletonsdir/[c-like.m4]) 22*cda5da8dSAndroid Build Coastguard Worker 23*cda5da8dSAndroid Build Coastguard Worker# b4_tocpp(STRING) 24*cda5da8dSAndroid Build Coastguard Worker# ---------------- 25*cda5da8dSAndroid Build Coastguard Worker# Convert STRING into a valid C macro name. 26*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_tocpp], 27*cda5da8dSAndroid Build Coastguard Worker[m4_toupper(m4_bpatsubst(m4_quote($1), [[^a-zA-Z0-9]+], [_]))]) 28*cda5da8dSAndroid Build Coastguard Worker 29*cda5da8dSAndroid Build Coastguard Worker 30*cda5da8dSAndroid Build Coastguard Worker# b4_cpp_guard(FILE) 31*cda5da8dSAndroid Build Coastguard Worker# ------------------ 32*cda5da8dSAndroid Build Coastguard Worker# A valid C macro name to use as a CPP header guard for FILE. 33*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_cpp_guard], 34*cda5da8dSAndroid Build Coastguard Worker[[YY_]b4_tocpp(m4_defn([b4_prefix])/[$1])[_INCLUDED]]) 35*cda5da8dSAndroid Build Coastguard Worker 36*cda5da8dSAndroid Build Coastguard Worker 37*cda5da8dSAndroid Build Coastguard Worker# b4_cpp_guard_open(FILE) 38*cda5da8dSAndroid Build Coastguard Worker# b4_cpp_guard_close(FILE) 39*cda5da8dSAndroid Build Coastguard Worker# ------------------------ 40*cda5da8dSAndroid Build Coastguard Worker# If FILE does not expand to nothing, open/close CPP inclusion guards for FILE. 41*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_cpp_guard_open], 42*cda5da8dSAndroid Build Coastguard Worker[m4_ifval(m4_quote($1), 43*cda5da8dSAndroid Build Coastguard Worker[#ifndef b4_cpp_guard([$1]) 44*cda5da8dSAndroid Build Coastguard Worker# define b4_cpp_guard([$1])])]) 45*cda5da8dSAndroid Build Coastguard Worker 46*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_cpp_guard_close], 47*cda5da8dSAndroid Build Coastguard Worker[m4_ifval(m4_quote($1), 48*cda5da8dSAndroid Build Coastguard Worker[#endif b4_comment([!b4_cpp_guard([$1])])])]) 49*cda5da8dSAndroid Build Coastguard Worker 50*cda5da8dSAndroid Build Coastguard Worker 51*cda5da8dSAndroid Build Coastguard Worker## ---------------- ## 52*cda5da8dSAndroid Build Coastguard Worker## Identification. ## 53*cda5da8dSAndroid Build Coastguard Worker## ---------------- ## 54*cda5da8dSAndroid Build Coastguard Worker 55*cda5da8dSAndroid Build Coastguard Worker# b4_identification 56*cda5da8dSAndroid Build Coastguard Worker# ----------------- 57*cda5da8dSAndroid Build Coastguard Worker# Depends on individual skeletons to define b4_pure_flag, b4_push_flag, or 58*cda5da8dSAndroid Build Coastguard Worker# b4_pull_flag if they use the values of the %define variables api.pure or 59*cda5da8dSAndroid Build Coastguard Worker# api.push-pull. 60*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_identification], 61*cda5da8dSAndroid Build Coastguard Worker[[/* Identify Bison output, and Bison version. */ 62*cda5da8dSAndroid Build Coastguard Worker#define YYBISON ]b4_version[ 63*cda5da8dSAndroid Build Coastguard Worker 64*cda5da8dSAndroid Build Coastguard Worker/* Bison version string. */ 65*cda5da8dSAndroid Build Coastguard Worker#define YYBISON_VERSION "]b4_version_string[" 66*cda5da8dSAndroid Build Coastguard Worker 67*cda5da8dSAndroid Build Coastguard Worker/* Skeleton name. */ 68*cda5da8dSAndroid Build Coastguard Worker#define YYSKELETON_NAME ]b4_skeleton[]m4_ifdef([b4_pure_flag], [[ 69*cda5da8dSAndroid Build Coastguard Worker 70*cda5da8dSAndroid Build Coastguard Worker/* Pure parsers. */ 71*cda5da8dSAndroid Build Coastguard Worker#define YYPURE ]b4_pure_flag])[]m4_ifdef([b4_push_flag], [[ 72*cda5da8dSAndroid Build Coastguard Worker 73*cda5da8dSAndroid Build Coastguard Worker/* Push parsers. */ 74*cda5da8dSAndroid Build Coastguard Worker#define YYPUSH ]b4_push_flag])[]m4_ifdef([b4_pull_flag], [[ 75*cda5da8dSAndroid Build Coastguard Worker 76*cda5da8dSAndroid Build Coastguard Worker/* Pull parsers. */ 77*cda5da8dSAndroid Build Coastguard Worker#define YYPULL ]b4_pull_flag])[ 78*cda5da8dSAndroid Build Coastguard Worker]]) 79*cda5da8dSAndroid Build Coastguard Worker 80*cda5da8dSAndroid Build Coastguard Worker 81*cda5da8dSAndroid Build Coastguard Worker## ---------------- ## 82*cda5da8dSAndroid Build Coastguard Worker## Default values. ## 83*cda5da8dSAndroid Build Coastguard Worker## ---------------- ## 84*cda5da8dSAndroid Build Coastguard Worker 85*cda5da8dSAndroid Build Coastguard Worker# b4_api_prefix, b4_api_PREFIX 86*cda5da8dSAndroid Build Coastguard Worker# ---------------------------- 87*cda5da8dSAndroid Build Coastguard Worker# Corresponds to %define api.prefix 88*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.prefix]], [[yy]]) 89*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_api_prefix], 90*cda5da8dSAndroid Build Coastguard Worker[b4_percent_define_get([[api.prefix]])]) 91*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_api_PREFIX], 92*cda5da8dSAndroid Build Coastguard Worker[m4_toupper(b4_api_prefix)]) 93*cda5da8dSAndroid Build Coastguard Worker 94*cda5da8dSAndroid Build Coastguard Worker 95*cda5da8dSAndroid Build Coastguard Worker# b4_prefix 96*cda5da8dSAndroid Build Coastguard Worker# --------- 97*cda5da8dSAndroid Build Coastguard Worker# If the %name-prefix is not given, it is api.prefix. 98*cda5da8dSAndroid Build Coastguard Workerm4_define_default([b4_prefix], [b4_api_prefix]) 99*cda5da8dSAndroid Build Coastguard Worker 100*cda5da8dSAndroid Build Coastguard Worker# If the %union is not named, its name is YYSTYPE. 101*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.value.union.name]], 102*cda5da8dSAndroid Build Coastguard Worker [b4_api_PREFIX[][STYPE]]) 103*cda5da8dSAndroid Build Coastguard Worker 104*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_default([[api.symbol.prefix]], [[YYSYMBOL_]]) 105*cda5da8dSAndroid Build Coastguard Worker 106*cda5da8dSAndroid Build Coastguard Worker## ------------------------ ## 107*cda5da8dSAndroid Build Coastguard Worker## Pure/impure interfaces. ## 108*cda5da8dSAndroid Build Coastguard Worker## ------------------------ ## 109*cda5da8dSAndroid Build Coastguard Worker 110*cda5da8dSAndroid Build Coastguard Worker# b4_yylex_formals 111*cda5da8dSAndroid Build Coastguard Worker# ---------------- 112*cda5da8dSAndroid Build Coastguard Worker# All the yylex formal arguments. 113*cda5da8dSAndroid Build Coastguard Worker# b4_lex_param arrives quoted twice, but we want to keep only one level. 114*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_yylex_formals], 115*cda5da8dSAndroid Build Coastguard Worker[b4_pure_if([[[b4_api_PREFIX[STYPE *yylvalp]], [[&yylval]]][]dnl 116*cda5da8dSAndroid Build Coastguard Workerb4_locations_if([, [b4_api_PREFIX[LTYPE *yyllocp], [&yylloc]]])])dnl 117*cda5da8dSAndroid Build Coastguard Workerm4_ifdef([b4_lex_param], [, ]b4_lex_param)]) 118*cda5da8dSAndroid Build Coastguard Worker 119*cda5da8dSAndroid Build Coastguard Worker 120*cda5da8dSAndroid Build Coastguard Worker# b4_yylex 121*cda5da8dSAndroid Build Coastguard Worker# -------- 122*cda5da8dSAndroid Build Coastguard Worker# Call yylex. 123*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_yylex], 124*cda5da8dSAndroid Build Coastguard Worker[b4_function_call([yylex], [int], b4_yylex_formals)]) 125*cda5da8dSAndroid Build Coastguard Worker 126*cda5da8dSAndroid Build Coastguard Worker 127*cda5da8dSAndroid Build Coastguard Worker# b4_user_args 128*cda5da8dSAndroid Build Coastguard Worker# ------------ 129*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_user_args], 130*cda5da8dSAndroid Build Coastguard Worker[m4_ifset([b4_parse_param], [, b4_user_args_no_comma])]) 131*cda5da8dSAndroid Build Coastguard Worker 132*cda5da8dSAndroid Build Coastguard Worker# b4_user_args_no_comma 133*cda5da8dSAndroid Build Coastguard Worker# --------------------- 134*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_user_args_no_comma], 135*cda5da8dSAndroid Build Coastguard Worker[m4_ifset([b4_parse_param], [b4_args(b4_parse_param)])]) 136*cda5da8dSAndroid Build Coastguard Worker 137*cda5da8dSAndroid Build Coastguard Worker 138*cda5da8dSAndroid Build Coastguard Worker# b4_user_formals 139*cda5da8dSAndroid Build Coastguard Worker# --------------- 140*cda5da8dSAndroid Build Coastguard Worker# The possible parse-params formal arguments preceded by a comma. 141*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_user_formals], 142*cda5da8dSAndroid Build Coastguard Worker[m4_ifset([b4_parse_param], [, b4_formals(b4_parse_param)])]) 143*cda5da8dSAndroid Build Coastguard Worker 144*cda5da8dSAndroid Build Coastguard Worker 145*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param 146*cda5da8dSAndroid Build Coastguard Worker# -------------- 147*cda5da8dSAndroid Build Coastguard Worker# If defined, b4_parse_param arrives double quoted, but below we prefer 148*cda5da8dSAndroid Build Coastguard Worker# it to be single quoted. 149*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param], 150*cda5da8dSAndroid Build Coastguard Workerb4_parse_param) 151*cda5da8dSAndroid Build Coastguard Worker 152*cda5da8dSAndroid Build Coastguard Worker 153*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param_for(DECL, FORMAL, BODY) 154*cda5da8dSAndroid Build Coastguard Worker# --------------------------------------- 155*cda5da8dSAndroid Build Coastguard Worker# Iterate over the user parameters, binding the declaration to DECL, 156*cda5da8dSAndroid Build Coastguard Worker# the formal name to FORMAL, and evaluating the BODY. 157*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param_for], 158*cda5da8dSAndroid Build Coastguard Worker[m4_foreach([$1_$2], m4_defn([b4_parse_param]), 159*cda5da8dSAndroid Build Coastguard Worker[m4_pushdef([$1], m4_unquote(m4_car($1_$2)))dnl 160*cda5da8dSAndroid Build Coastguard Workerm4_pushdef([$2], m4_shift($1_$2))dnl 161*cda5da8dSAndroid Build Coastguard Worker$3[]dnl 162*cda5da8dSAndroid Build Coastguard Workerm4_popdef([$2])dnl 163*cda5da8dSAndroid Build Coastguard Workerm4_popdef([$1])dnl 164*cda5da8dSAndroid Build Coastguard Worker])]) 165*cda5da8dSAndroid Build Coastguard Worker 166*cda5da8dSAndroid Build Coastguard Worker 167*cda5da8dSAndroid Build Coastguard Worker# b4_use(EXPR) 168*cda5da8dSAndroid Build Coastguard Worker# ------------ 169*cda5da8dSAndroid Build Coastguard Worker# Pacify the compiler about some maybe unused value. 170*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_use], 171*cda5da8dSAndroid Build Coastguard Worker[YY_USE ($1)]) 172*cda5da8dSAndroid Build Coastguard Worker 173*cda5da8dSAndroid Build Coastguard Worker# b4_parse_param_use([VAL], [LOC]) 174*cda5da8dSAndroid Build Coastguard Worker# -------------------------------- 175*cda5da8dSAndroid Build Coastguard Worker# 'YY_USE' VAL, LOC if locations are enabled, and all the parse-params. 176*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_parse_param_use], 177*cda5da8dSAndroid Build Coastguard Worker[m4_ifvaln([$1], [ b4_use([$1]);])dnl 178*cda5da8dSAndroid Build Coastguard Workerb4_locations_if([m4_ifvaln([$2], [ b4_use([$2]);])])dnl 179*cda5da8dSAndroid Build Coastguard Workerb4_parse_param_for([Decl], [Formal], [ b4_use(Formal); 180*cda5da8dSAndroid Build Coastguard Worker])dnl 181*cda5da8dSAndroid Build Coastguard Worker]) 182*cda5da8dSAndroid Build Coastguard Worker 183*cda5da8dSAndroid Build Coastguard Worker 184*cda5da8dSAndroid Build Coastguard Worker## ------------ ## 185*cda5da8dSAndroid Build Coastguard Worker## Data Types. ## 186*cda5da8dSAndroid Build Coastguard Worker## ------------ ## 187*cda5da8dSAndroid Build Coastguard Worker 188*cda5da8dSAndroid Build Coastguard Worker# b4_int_type(MIN, MAX) 189*cda5da8dSAndroid Build Coastguard Worker# --------------------- 190*cda5da8dSAndroid Build Coastguard Worker# Return a narrow int type able to handle integers ranging from MIN 191*cda5da8dSAndroid Build Coastguard Worker# to MAX (included) in portable C code. Assume MIN and MAX fall in 192*cda5da8dSAndroid Build Coastguard Worker# 'int' range. 193*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_int_type], 194*cda5da8dSAndroid Build Coastguard Worker[m4_if(b4_ints_in($@, [-127], [127]), [1], [signed char], 195*cda5da8dSAndroid Build Coastguard Worker b4_ints_in($@, [0], [255]), [1], [unsigned char], 196*cda5da8dSAndroid Build Coastguard Worker 197*cda5da8dSAndroid Build Coastguard Worker b4_ints_in($@, [-32767], [32767]), [1], [short], 198*cda5da8dSAndroid Build Coastguard Worker b4_ints_in($@, [0], [65535]), [1], [unsigned short], 199*cda5da8dSAndroid Build Coastguard Worker 200*cda5da8dSAndroid Build Coastguard Worker [int])]) 201*cda5da8dSAndroid Build Coastguard Worker 202*cda5da8dSAndroid Build Coastguard Worker# b4_c99_int_type(MIN, MAX) 203*cda5da8dSAndroid Build Coastguard Worker# ------------------------- 204*cda5da8dSAndroid Build Coastguard Worker# Like b4_int_type, but for C99. 205*cda5da8dSAndroid Build Coastguard Worker# b4_c99_int_type_define replaces b4_int_type with this. 206*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_c99_int_type], 207*cda5da8dSAndroid Build Coastguard Worker[m4_if(b4_ints_in($@, [-127], [127]), [1], [yytype_int8], 208*cda5da8dSAndroid Build Coastguard Worker b4_ints_in($@, [0], [255]), [1], [yytype_uint8], 209*cda5da8dSAndroid Build Coastguard Worker 210*cda5da8dSAndroid Build Coastguard Worker b4_ints_in($@, [-32767], [32767]), [1], [yytype_int16], 211*cda5da8dSAndroid Build Coastguard Worker b4_ints_in($@, [0], [65535]), [1], [yytype_uint16], 212*cda5da8dSAndroid Build Coastguard Worker 213*cda5da8dSAndroid Build Coastguard Worker [int])]) 214*cda5da8dSAndroid Build Coastguard Worker 215*cda5da8dSAndroid Build Coastguard Worker# b4_c99_int_type_define 216*cda5da8dSAndroid Build Coastguard Worker# ---------------------- 217*cda5da8dSAndroid Build Coastguard Worker# Define private types suitable for holding small integers in C99 or later. 218*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_c99_int_type_define], 219*cda5da8dSAndroid Build Coastguard Worker[m4_copy_force([b4_c99_int_type], [b4_int_type])dnl 220*cda5da8dSAndroid Build Coastguard Worker[#ifdef short 221*cda5da8dSAndroid Build Coastguard Worker# undef short 222*cda5da8dSAndroid Build Coastguard Worker#endif 223*cda5da8dSAndroid Build Coastguard Worker 224*cda5da8dSAndroid Build Coastguard Worker/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure 225*cda5da8dSAndroid Build Coastguard Worker <limits.h> and (if available) <stdint.h> are included 226*cda5da8dSAndroid Build Coastguard Worker so that the code can choose integer types of a good width. */ 227*cda5da8dSAndroid Build Coastguard Worker 228*cda5da8dSAndroid Build Coastguard Worker#ifndef __PTRDIFF_MAX__ 229*cda5da8dSAndroid Build Coastguard Worker# include <limits.h> /* INFRINGES ON USER NAME SPACE */ 230*cda5da8dSAndroid Build Coastguard Worker# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ 231*cda5da8dSAndroid Build Coastguard Worker# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ 232*cda5da8dSAndroid Build Coastguard Worker# define YY_STDINT_H 233*cda5da8dSAndroid Build Coastguard Worker# endif 234*cda5da8dSAndroid Build Coastguard Worker#endif 235*cda5da8dSAndroid Build Coastguard Worker 236*cda5da8dSAndroid Build Coastguard Worker/* Narrow types that promote to a signed type and that can represent a 237*cda5da8dSAndroid Build Coastguard Worker signed or unsigned integer of at least N bits. In tables they can 238*cda5da8dSAndroid Build Coastguard Worker save space and decrease cache pressure. Promoting to a signed type 239*cda5da8dSAndroid Build Coastguard Worker helps avoid bugs in integer arithmetic. */ 240*cda5da8dSAndroid Build Coastguard Worker 241*cda5da8dSAndroid Build Coastguard Worker#ifdef __INT_LEAST8_MAX__ 242*cda5da8dSAndroid Build Coastguard Workertypedef __INT_LEAST8_TYPE__ yytype_int8; 243*cda5da8dSAndroid Build Coastguard Worker#elif defined YY_STDINT_H 244*cda5da8dSAndroid Build Coastguard Workertypedef int_least8_t yytype_int8; 245*cda5da8dSAndroid Build Coastguard Worker#else 246*cda5da8dSAndroid Build Coastguard Workertypedef signed char yytype_int8; 247*cda5da8dSAndroid Build Coastguard Worker#endif 248*cda5da8dSAndroid Build Coastguard Worker 249*cda5da8dSAndroid Build Coastguard Worker#ifdef __INT_LEAST16_MAX__ 250*cda5da8dSAndroid Build Coastguard Workertypedef __INT_LEAST16_TYPE__ yytype_int16; 251*cda5da8dSAndroid Build Coastguard Worker#elif defined YY_STDINT_H 252*cda5da8dSAndroid Build Coastguard Workertypedef int_least16_t yytype_int16; 253*cda5da8dSAndroid Build Coastguard Worker#else 254*cda5da8dSAndroid Build Coastguard Workertypedef short yytype_int16; 255*cda5da8dSAndroid Build Coastguard Worker#endif 256*cda5da8dSAndroid Build Coastguard Worker 257*cda5da8dSAndroid Build Coastguard Worker/* Work around bug in HP-UX 11.23, which defines these macros 258*cda5da8dSAndroid Build Coastguard Worker incorrectly for preprocessor constants. This workaround can likely 259*cda5da8dSAndroid Build Coastguard Worker be removed in 2023, as HPE has promised support for HP-UX 11.23 260*cda5da8dSAndroid Build Coastguard Worker (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of 261*cda5da8dSAndroid Build Coastguard Worker <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */ 262*cda5da8dSAndroid Build Coastguard Worker#ifdef __hpux 263*cda5da8dSAndroid Build Coastguard Worker# undef UINT_LEAST8_MAX 264*cda5da8dSAndroid Build Coastguard Worker# undef UINT_LEAST16_MAX 265*cda5da8dSAndroid Build Coastguard Worker# define UINT_LEAST8_MAX 255 266*cda5da8dSAndroid Build Coastguard Worker# define UINT_LEAST16_MAX 65535 267*cda5da8dSAndroid Build Coastguard Worker#endif 268*cda5da8dSAndroid Build Coastguard Worker 269*cda5da8dSAndroid Build Coastguard Worker#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ 270*cda5da8dSAndroid Build Coastguard Workertypedef __UINT_LEAST8_TYPE__ yytype_uint8; 271*cda5da8dSAndroid Build Coastguard Worker#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ 272*cda5da8dSAndroid Build Coastguard Worker && UINT_LEAST8_MAX <= INT_MAX) 273*cda5da8dSAndroid Build Coastguard Workertypedef uint_least8_t yytype_uint8; 274*cda5da8dSAndroid Build Coastguard Worker#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX 275*cda5da8dSAndroid Build Coastguard Workertypedef unsigned char yytype_uint8; 276*cda5da8dSAndroid Build Coastguard Worker#else 277*cda5da8dSAndroid Build Coastguard Workertypedef short yytype_uint8; 278*cda5da8dSAndroid Build Coastguard Worker#endif 279*cda5da8dSAndroid Build Coastguard Worker 280*cda5da8dSAndroid Build Coastguard Worker#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ 281*cda5da8dSAndroid Build Coastguard Workertypedef __UINT_LEAST16_TYPE__ yytype_uint16; 282*cda5da8dSAndroid Build Coastguard Worker#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ 283*cda5da8dSAndroid Build Coastguard Worker && UINT_LEAST16_MAX <= INT_MAX) 284*cda5da8dSAndroid Build Coastguard Workertypedef uint_least16_t yytype_uint16; 285*cda5da8dSAndroid Build Coastguard Worker#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX 286*cda5da8dSAndroid Build Coastguard Workertypedef unsigned short yytype_uint16; 287*cda5da8dSAndroid Build Coastguard Worker#else 288*cda5da8dSAndroid Build Coastguard Workertypedef int yytype_uint16; 289*cda5da8dSAndroid Build Coastguard Worker#endif]]) 290*cda5da8dSAndroid Build Coastguard Worker 291*cda5da8dSAndroid Build Coastguard Worker 292*cda5da8dSAndroid Build Coastguard Worker# b4_sizes_types_define 293*cda5da8dSAndroid Build Coastguard Worker# --------------------- 294*cda5da8dSAndroid Build Coastguard Worker# Define YYPTRDIFF_T/YYPTRDIFF_MAXIMUM, YYSIZE_T/YYSIZE_MAXIMUM, 295*cda5da8dSAndroid Build Coastguard Worker# and YYSIZEOF. 296*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_sizes_types_define], 297*cda5da8dSAndroid Build Coastguard Worker[[#ifndef YYPTRDIFF_T 298*cda5da8dSAndroid Build Coastguard Worker# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ 299*cda5da8dSAndroid Build Coastguard Worker# define YYPTRDIFF_T __PTRDIFF_TYPE__ 300*cda5da8dSAndroid Build Coastguard Worker# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ 301*cda5da8dSAndroid Build Coastguard Worker# elif defined PTRDIFF_MAX 302*cda5da8dSAndroid Build Coastguard Worker# ifndef ptrdiff_t 303*cda5da8dSAndroid Build Coastguard Worker# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 304*cda5da8dSAndroid Build Coastguard Worker# endif 305*cda5da8dSAndroid Build Coastguard Worker# define YYPTRDIFF_T ptrdiff_t 306*cda5da8dSAndroid Build Coastguard Worker# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX 307*cda5da8dSAndroid Build Coastguard Worker# else 308*cda5da8dSAndroid Build Coastguard Worker# define YYPTRDIFF_T long 309*cda5da8dSAndroid Build Coastguard Worker# define YYPTRDIFF_MAXIMUM LONG_MAX 310*cda5da8dSAndroid Build Coastguard Worker# endif 311*cda5da8dSAndroid Build Coastguard Worker#endif 312*cda5da8dSAndroid Build Coastguard Worker 313*cda5da8dSAndroid Build Coastguard Worker#ifndef YYSIZE_T 314*cda5da8dSAndroid Build Coastguard Worker# ifdef __SIZE_TYPE__ 315*cda5da8dSAndroid Build Coastguard Worker# define YYSIZE_T __SIZE_TYPE__ 316*cda5da8dSAndroid Build Coastguard Worker# elif defined size_t 317*cda5da8dSAndroid Build Coastguard Worker# define YYSIZE_T size_t 318*cda5da8dSAndroid Build Coastguard Worker# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ 319*cda5da8dSAndroid Build Coastguard Worker# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 320*cda5da8dSAndroid Build Coastguard Worker# define YYSIZE_T size_t 321*cda5da8dSAndroid Build Coastguard Worker# else 322*cda5da8dSAndroid Build Coastguard Worker# define YYSIZE_T unsigned 323*cda5da8dSAndroid Build Coastguard Worker# endif 324*cda5da8dSAndroid Build Coastguard Worker#endif 325*cda5da8dSAndroid Build Coastguard Worker 326*cda5da8dSAndroid Build Coastguard Worker#define YYSIZE_MAXIMUM \ 327*cda5da8dSAndroid Build Coastguard Worker YY_CAST (YYPTRDIFF_T, \ 328*cda5da8dSAndroid Build Coastguard Worker (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ 329*cda5da8dSAndroid Build Coastguard Worker ? YYPTRDIFF_MAXIMUM \ 330*cda5da8dSAndroid Build Coastguard Worker : YY_CAST (YYSIZE_T, -1))) 331*cda5da8dSAndroid Build Coastguard Worker 332*cda5da8dSAndroid Build Coastguard Worker#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) 333*cda5da8dSAndroid Build Coastguard Worker]]) 334*cda5da8dSAndroid Build Coastguard Worker 335*cda5da8dSAndroid Build Coastguard Worker 336*cda5da8dSAndroid Build Coastguard Worker# b4_int_type_for(NAME) 337*cda5da8dSAndroid Build Coastguard Worker# --------------------- 338*cda5da8dSAndroid Build Coastguard Worker# Return a narrow int type able to handle numbers ranging from 339*cda5da8dSAndroid Build Coastguard Worker# 'NAME_min' to 'NAME_max' (included). 340*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_int_type_for], 341*cda5da8dSAndroid Build Coastguard Worker[b4_int_type($1_min, $1_max)]) 342*cda5da8dSAndroid Build Coastguard Worker 343*cda5da8dSAndroid Build Coastguard Worker 344*cda5da8dSAndroid Build Coastguard Worker# b4_table_value_equals(TABLE, VALUE, LITERAL, SYMBOL) 345*cda5da8dSAndroid Build Coastguard Worker# ---------------------------------------------------- 346*cda5da8dSAndroid Build Coastguard Worker# Without inducing a comparison warning from the compiler, check if the 347*cda5da8dSAndroid Build Coastguard Worker# literal value LITERAL equals VALUE from table TABLE, which must have 348*cda5da8dSAndroid Build Coastguard Worker# TABLE_min and TABLE_max defined. SYMBOL denotes 349*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_table_value_equals], 350*cda5da8dSAndroid Build Coastguard Worker[m4_if(m4_eval($3 < m4_indir([b4_]$1[_min]) 351*cda5da8dSAndroid Build Coastguard Worker || m4_indir([b4_]$1[_max]) < $3), [1], 352*cda5da8dSAndroid Build Coastguard Worker [[0]], 353*cda5da8dSAndroid Build Coastguard Worker [(($2) == $4)])]) 354*cda5da8dSAndroid Build Coastguard Worker 355*cda5da8dSAndroid Build Coastguard Worker 356*cda5da8dSAndroid Build Coastguard Worker## ----------------- ## 357*cda5da8dSAndroid Build Coastguard Worker## Compiler issues. ## 358*cda5da8dSAndroid Build Coastguard Worker## ----------------- ## 359*cda5da8dSAndroid Build Coastguard Worker 360*cda5da8dSAndroid Build Coastguard Worker# b4_attribute_define([noreturn]) 361*cda5da8dSAndroid Build Coastguard Worker# ------------------------------- 362*cda5da8dSAndroid Build Coastguard Worker# Provide portable compiler "attributes". If "noreturn" is passed, define 363*cda5da8dSAndroid Build Coastguard Worker# _Noreturn. 364*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_attribute_define], 365*cda5da8dSAndroid Build Coastguard Worker[[#ifndef YY_ATTRIBUTE_PURE 366*cda5da8dSAndroid Build Coastguard Worker# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) 367*cda5da8dSAndroid Build Coastguard Worker# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) 368*cda5da8dSAndroid Build Coastguard Worker# else 369*cda5da8dSAndroid Build Coastguard Worker# define YY_ATTRIBUTE_PURE 370*cda5da8dSAndroid Build Coastguard Worker# endif 371*cda5da8dSAndroid Build Coastguard Worker#endif 372*cda5da8dSAndroid Build Coastguard Worker 373*cda5da8dSAndroid Build Coastguard Worker#ifndef YY_ATTRIBUTE_UNUSED 374*cda5da8dSAndroid Build Coastguard Worker# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) 375*cda5da8dSAndroid Build Coastguard Worker# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 376*cda5da8dSAndroid Build Coastguard Worker# else 377*cda5da8dSAndroid Build Coastguard Worker# define YY_ATTRIBUTE_UNUSED 378*cda5da8dSAndroid Build Coastguard Worker# endif 379*cda5da8dSAndroid Build Coastguard Worker#endif 380*cda5da8dSAndroid Build Coastguard Worker 381*cda5da8dSAndroid Build Coastguard Worker]m4_bmatch([$1], [\bnoreturn\b], [[/* The _Noreturn keyword of C11. */ 382*cda5da8dSAndroid Build Coastguard Worker]dnl This is close to lib/_Noreturn.h, except that we do enable 383*cda5da8dSAndroid Build Coastguard Workerdnl the use of [[noreturn]], because _Noreturn is used in places 384*cda5da8dSAndroid Build Coastguard Workerdnl where [[noreturn]] works in C++. We need this in particular 385*cda5da8dSAndroid Build Coastguard Workerdnl because of glr.cc which compiles code from glr.c in C++. 386*cda5da8dSAndroid Build Coastguard Workerdnl And the C++ compiler chokes on _Noreturn. Also, we do not 387*cda5da8dSAndroid Build Coastguard Workerdnl use C' _Noreturn in C++, to avoid -Wc11-extensions warnings. 388*cda5da8dSAndroid Build Coastguard Worker[#ifndef _Noreturn 389*cda5da8dSAndroid Build Coastguard Worker# if (defined __cplusplus \ 390*cda5da8dSAndroid Build Coastguard Worker && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ 391*cda5da8dSAndroid Build Coastguard Worker || (defined _MSC_VER && 1900 <= _MSC_VER))) 392*cda5da8dSAndroid Build Coastguard Worker# define _Noreturn [[noreturn]] 393*cda5da8dSAndroid Build Coastguard Worker# elif ((!defined __cplusplus || defined __clang__) \ 394*cda5da8dSAndroid Build Coastguard Worker && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ 395*cda5da8dSAndroid Build Coastguard Worker || (!defined __STRICT_ANSI__ \ 396*cda5da8dSAndroid Build Coastguard Worker && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ 397*cda5da8dSAndroid Build Coastguard Worker || (defined __apple_build_version__ \ 398*cda5da8dSAndroid Build Coastguard Worker ? 6000000 <= __apple_build_version__ \ 399*cda5da8dSAndroid Build Coastguard Worker : 3 < __clang_major__ + (5 <= __clang_minor__)))))) 400*cda5da8dSAndroid Build Coastguard Worker /* _Noreturn works as-is. */ 401*cda5da8dSAndroid Build Coastguard Worker# elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ 402*cda5da8dSAndroid Build Coastguard Worker || 0x5110 <= __SUNPRO_C) 403*cda5da8dSAndroid Build Coastguard Worker# define _Noreturn __attribute__ ((__noreturn__)) 404*cda5da8dSAndroid Build Coastguard Worker# elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) 405*cda5da8dSAndroid Build Coastguard Worker# define _Noreturn __declspec (noreturn) 406*cda5da8dSAndroid Build Coastguard Worker# else 407*cda5da8dSAndroid Build Coastguard Worker# define _Noreturn 408*cda5da8dSAndroid Build Coastguard Worker# endif 409*cda5da8dSAndroid Build Coastguard Worker#endif 410*cda5da8dSAndroid Build Coastguard Worker 411*cda5da8dSAndroid Build Coastguard Worker]])[/* Suppress unused-variable warnings by "using" E. */ 412*cda5da8dSAndroid Build Coastguard Worker#if ! defined lint || defined __GNUC__ 413*cda5da8dSAndroid Build Coastguard Worker# define YY_USE(E) ((void) (E)) 414*cda5da8dSAndroid Build Coastguard Worker#else 415*cda5da8dSAndroid Build Coastguard Worker# define YY_USE(E) /* empty */ 416*cda5da8dSAndroid Build Coastguard Worker#endif 417*cda5da8dSAndroid Build Coastguard Worker 418*cda5da8dSAndroid Build Coastguard Worker/* Suppress an incorrect diagnostic about yylval being uninitialized. */ 419*cda5da8dSAndroid Build Coastguard Worker#if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__ 420*cda5da8dSAndroid Build Coastguard Worker# if __GNUC__ * 100 + __GNUC_MINOR__ < 407 421*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 422*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic push") \ 423*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") 424*cda5da8dSAndroid Build Coastguard Worker# else 425*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 426*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic push") \ 427*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ 428*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 429*cda5da8dSAndroid Build Coastguard Worker# endif 430*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 431*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic pop") 432*cda5da8dSAndroid Build Coastguard Worker#else 433*cda5da8dSAndroid Build Coastguard Worker# define YY_INITIAL_VALUE(Value) Value 434*cda5da8dSAndroid Build Coastguard Worker#endif 435*cda5da8dSAndroid Build Coastguard Worker#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 436*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 437*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_MAYBE_UNINITIALIZED_END 438*cda5da8dSAndroid Build Coastguard Worker#endif 439*cda5da8dSAndroid Build Coastguard Worker#ifndef YY_INITIAL_VALUE 440*cda5da8dSAndroid Build Coastguard Worker# define YY_INITIAL_VALUE(Value) /* Nothing. */ 441*cda5da8dSAndroid Build Coastguard Worker#endif 442*cda5da8dSAndroid Build Coastguard Worker 443*cda5da8dSAndroid Build Coastguard Worker#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ 444*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_USELESS_CAST_BEGIN \ 445*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic push") \ 446*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") 447*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_USELESS_CAST_END \ 448*cda5da8dSAndroid Build Coastguard Worker _Pragma ("GCC diagnostic pop") 449*cda5da8dSAndroid Build Coastguard Worker#endif 450*cda5da8dSAndroid Build Coastguard Worker#ifndef YY_IGNORE_USELESS_CAST_BEGIN 451*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_USELESS_CAST_BEGIN 452*cda5da8dSAndroid Build Coastguard Worker# define YY_IGNORE_USELESS_CAST_END 453*cda5da8dSAndroid Build Coastguard Worker#endif 454*cda5da8dSAndroid Build Coastguard Worker]]) 455*cda5da8dSAndroid Build Coastguard Worker 456*cda5da8dSAndroid Build Coastguard Worker 457*cda5da8dSAndroid Build Coastguard Worker# b4_cast_define 458*cda5da8dSAndroid Build Coastguard Worker# -------------- 459*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_cast_define], 460*cda5da8dSAndroid Build Coastguard Worker[# ifndef YY_CAST 461*cda5da8dSAndroid Build Coastguard Worker# ifdef __cplusplus 462*cda5da8dSAndroid Build Coastguard Worker# define YY_CAST(Type, Val) static_cast<Type> (Val) 463*cda5da8dSAndroid Build Coastguard Worker# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) 464*cda5da8dSAndroid Build Coastguard Worker# else 465*cda5da8dSAndroid Build Coastguard Worker# define YY_CAST(Type, Val) ((Type) (Val)) 466*cda5da8dSAndroid Build Coastguard Worker# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) 467*cda5da8dSAndroid Build Coastguard Worker# endif 468*cda5da8dSAndroid Build Coastguard Worker# endif[]dnl 469*cda5da8dSAndroid Build Coastguard Worker]) 470*cda5da8dSAndroid Build Coastguard Worker 471*cda5da8dSAndroid Build Coastguard Worker 472*cda5da8dSAndroid Build Coastguard Worker# b4_null_define 473*cda5da8dSAndroid Build Coastguard Worker# -------------- 474*cda5da8dSAndroid Build Coastguard Worker# Portability issues: define a YY_NULLPTR appropriate for the current 475*cda5da8dSAndroid Build Coastguard Worker# language (C, C++98, or C++11). 476*cda5da8dSAndroid Build Coastguard Worker# 477*cda5da8dSAndroid Build Coastguard Worker# In C++ pre C++11 it is standard practice to use 0 (not NULL) for the 478*cda5da8dSAndroid Build Coastguard Worker# null pointer. In C, prefer ((void*)0) to avoid having to include stdlib.h. 479*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_null_define], 480*cda5da8dSAndroid Build Coastguard Worker[# ifndef YY_NULLPTR 481*cda5da8dSAndroid Build Coastguard Worker# if defined __cplusplus 482*cda5da8dSAndroid Build Coastguard Worker# if 201103L <= __cplusplus 483*cda5da8dSAndroid Build Coastguard Worker# define YY_NULLPTR nullptr 484*cda5da8dSAndroid Build Coastguard Worker# else 485*cda5da8dSAndroid Build Coastguard Worker# define YY_NULLPTR 0 486*cda5da8dSAndroid Build Coastguard Worker# endif 487*cda5da8dSAndroid Build Coastguard Worker# else 488*cda5da8dSAndroid Build Coastguard Worker# define YY_NULLPTR ((void*)0) 489*cda5da8dSAndroid Build Coastguard Worker# endif 490*cda5da8dSAndroid Build Coastguard Worker# endif[]dnl 491*cda5da8dSAndroid Build Coastguard Worker]) 492*cda5da8dSAndroid Build Coastguard Worker 493*cda5da8dSAndroid Build Coastguard Worker 494*cda5da8dSAndroid Build Coastguard Worker# b4_null 495*cda5da8dSAndroid Build Coastguard Worker# ------- 496*cda5da8dSAndroid Build Coastguard Worker# Return a null pointer constant. 497*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_null], [YY_NULLPTR]) 498*cda5da8dSAndroid Build Coastguard Worker 499*cda5da8dSAndroid Build Coastguard Worker 500*cda5da8dSAndroid Build Coastguard Worker 501*cda5da8dSAndroid Build Coastguard Worker## ---------## 502*cda5da8dSAndroid Build Coastguard Worker## Values. ## 503*cda5da8dSAndroid Build Coastguard Worker## ---------## 504*cda5da8dSAndroid Build Coastguard Worker 505*cda5da8dSAndroid Build Coastguard Worker# b4_integral_parser_table_define(TABLE-NAME, CONTENT, COMMENT) 506*cda5da8dSAndroid Build Coastguard Worker# ------------------------------------------------------------- 507*cda5da8dSAndroid Build Coastguard Worker# Define "yy<TABLE-NAME>" whose contents is CONTENT. 508*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_integral_parser_table_define], 509*cda5da8dSAndroid Build Coastguard Worker[m4_ifvaln([$3], [b4_comment([$3])])dnl 510*cda5da8dSAndroid Build Coastguard Workerstatic const b4_int_type_for([$2]) yy$1[[]] = 511*cda5da8dSAndroid Build Coastguard Worker{ 512*cda5da8dSAndroid Build Coastguard Worker $2 513*cda5da8dSAndroid Build Coastguard Worker};dnl 514*cda5da8dSAndroid Build Coastguard Worker]) 515*cda5da8dSAndroid Build Coastguard Worker 516*cda5da8dSAndroid Build Coastguard Worker 517*cda5da8dSAndroid Build Coastguard Worker## ------------- ## 518*cda5da8dSAndroid Build Coastguard Worker## Token kinds. ## 519*cda5da8dSAndroid Build Coastguard Worker## ------------- ## 520*cda5da8dSAndroid Build Coastguard Worker 521*cda5da8dSAndroid Build Coastguard Worker# Because C enums are not scoped, because tokens are exposed in the 522*cda5da8dSAndroid Build Coastguard Worker# header, and because these tokens are common to all the parsers, we 523*cda5da8dSAndroid Build Coastguard Worker# need to make sure their names don't collide: use the api.prefix. 524*cda5da8dSAndroid Build Coastguard Worker# YYEOF is special, since the user may give it a different name. 525*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol(-2, id)], [b4_api_PREFIX[][EMPTY]]) 526*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol(-2, tag)], [[No symbol.]]) 527*cda5da8dSAndroid Build Coastguard Worker 528*cda5da8dSAndroid Build Coastguard Workerm4_if(b4_symbol(eof, id), [YYEOF], 529*cda5da8dSAndroid Build Coastguard Worker [m4_define([b4_symbol(0, id)], [b4_api_PREFIX[][EOF]])]) 530*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol(1, id)], [b4_api_PREFIX[][error]]) 531*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol(2, id)], [b4_api_PREFIX[][UNDEF]]) 532*cda5da8dSAndroid Build Coastguard Worker 533*cda5da8dSAndroid Build Coastguard Worker 534*cda5da8dSAndroid Build Coastguard Worker# b4_token_define(TOKEN-NUM) 535*cda5da8dSAndroid Build Coastguard Worker# -------------------------- 536*cda5da8dSAndroid Build Coastguard Worker# Output the definition of this token as #define. 537*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_define], 538*cda5da8dSAndroid Build Coastguard Worker[b4_token_format([#define %s %s], [$1])]) 539*cda5da8dSAndroid Build Coastguard Worker 540*cda5da8dSAndroid Build Coastguard Worker# b4_token_defines 541*cda5da8dSAndroid Build Coastguard Worker# ---------------- 542*cda5da8dSAndroid Build Coastguard Worker# Output the definition of the tokens. 543*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_defines], 544*cda5da8dSAndroid Build Coastguard Worker[[/* Token kinds. */ 545*cda5da8dSAndroid Build Coastguard Worker#define ]b4_symbol(empty, [id])[ -2 546*cda5da8dSAndroid Build Coastguard Worker]m4_join([ 547*cda5da8dSAndroid Build Coastguard Worker], b4_symbol_map([b4_token_define])) 548*cda5da8dSAndroid Build Coastguard Worker]) 549*cda5da8dSAndroid Build Coastguard Worker 550*cda5da8dSAndroid Build Coastguard Worker 551*cda5da8dSAndroid Build Coastguard Worker# b4_token_enum(TOKEN-NUM) 552*cda5da8dSAndroid Build Coastguard Worker# ------------------------ 553*cda5da8dSAndroid Build Coastguard Worker# Output the definition of this token as an enum. 554*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_enum], 555*cda5da8dSAndroid Build Coastguard Worker[b4_token_visible_if([$1], 556*cda5da8dSAndroid Build Coastguard Worker [m4_format([ %-30s %s], 557*cda5da8dSAndroid Build Coastguard Worker m4_format([[%s = %s%s%s]], 558*cda5da8dSAndroid Build Coastguard Worker b4_symbol([$1], [id]), 559*cda5da8dSAndroid Build Coastguard Worker b4_symbol([$1], b4_api_token_raw_if([[number]], [[code]])), 560*cda5da8dSAndroid Build Coastguard Worker m4_if([$1], b4_last_enum_token, [], [[,]])), 561*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_tag_comment([$1])])])]) 562*cda5da8dSAndroid Build Coastguard Worker 563*cda5da8dSAndroid Build Coastguard Worker 564*cda5da8dSAndroid Build Coastguard Worker# b4_token_enums 565*cda5da8dSAndroid Build Coastguard Worker# -------------- 566*cda5da8dSAndroid Build Coastguard Worker# The definition of the token kinds. 567*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_enums], 568*cda5da8dSAndroid Build Coastguard Worker[b4_any_token_visible_if([[/* Token kinds. */ 569*cda5da8dSAndroid Build Coastguard Worker#ifndef ]b4_api_PREFIX[TOKENTYPE 570*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[TOKENTYPE 571*cda5da8dSAndroid Build Coastguard Worker enum ]b4_api_prefix[tokentype 572*cda5da8dSAndroid Build Coastguard Worker { 573*cda5da8dSAndroid Build Coastguard Worker ]b4_symbol(empty, [id])[ = -2, 574*cda5da8dSAndroid Build Coastguard Worker]b4_symbol_foreach([b4_token_enum])dnl 575*cda5da8dSAndroid Build Coastguard Worker[ }; 576*cda5da8dSAndroid Build Coastguard Worker typedef enum ]b4_api_prefix[tokentype ]b4_api_prefix[token_kind_t; 577*cda5da8dSAndroid Build Coastguard Worker#endif 578*cda5da8dSAndroid Build Coastguard Worker]])]) 579*cda5da8dSAndroid Build Coastguard Worker 580*cda5da8dSAndroid Build Coastguard Worker 581*cda5da8dSAndroid Build Coastguard Worker# b4_token_enums_defines 582*cda5da8dSAndroid Build Coastguard Worker# ---------------------- 583*cda5da8dSAndroid Build Coastguard Worker# The definition of the tokens (if there are any) as enums and, 584*cda5da8dSAndroid Build Coastguard Worker# if POSIX Yacc is enabled, as #defines. 585*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_token_enums_defines], 586*cda5da8dSAndroid Build Coastguard Worker[b4_token_enums[]b4_yacc_if([b4_token_defines])]) 587*cda5da8dSAndroid Build Coastguard Worker 588*cda5da8dSAndroid Build Coastguard Worker 589*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_translate(STRING) 590*cda5da8dSAndroid Build Coastguard Worker# --------------------------- 591*cda5da8dSAndroid Build Coastguard Worker# Used by "bison" in the array of symbol names to mark those that 592*cda5da8dSAndroid Build Coastguard Worker# require translation. 593*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_translate], 594*cda5da8dSAndroid Build Coastguard Worker[[N_($1)]]) 595*cda5da8dSAndroid Build Coastguard Worker 596*cda5da8dSAndroid Build Coastguard Worker 597*cda5da8dSAndroid Build Coastguard Worker 598*cda5da8dSAndroid Build Coastguard Worker## -------------- ## 599*cda5da8dSAndroid Build Coastguard Worker## Symbol kinds. ## 600*cda5da8dSAndroid Build Coastguard Worker## -------------- ## 601*cda5da8dSAndroid Build Coastguard Worker 602*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_enum(SYMBOL-NUM) 603*cda5da8dSAndroid Build Coastguard Worker# -------------------------- 604*cda5da8dSAndroid Build Coastguard Worker# Output the definition of this symbol as an enum. 605*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_enum], 606*cda5da8dSAndroid Build Coastguard Worker[m4_format([ %-40s %s], 607*cda5da8dSAndroid Build Coastguard Worker m4_format([[%s = %s%s%s]], 608*cda5da8dSAndroid Build Coastguard Worker b4_symbol([$1], [kind_base]), 609*cda5da8dSAndroid Build Coastguard Worker [$1], 610*cda5da8dSAndroid Build Coastguard Worker m4_if([$1], b4_last_symbol, [], [[,]])), 611*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_tag_comment([$1])])]) 612*cda5da8dSAndroid Build Coastguard Worker 613*cda5da8dSAndroid Build Coastguard Worker 614*cda5da8dSAndroid Build Coastguard Worker# b4_declare_symbol_enum 615*cda5da8dSAndroid Build Coastguard Worker# ---------------------- 616*cda5da8dSAndroid Build Coastguard Worker# The definition of the symbol internal numbers as an enum. 617*cda5da8dSAndroid Build Coastguard Worker# Defining YYEMPTY here is important: it forces the compiler 618*cda5da8dSAndroid Build Coastguard Worker# to use a signed type, which matters for yytoken. 619*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_declare_symbol_enum], 620*cda5da8dSAndroid Build Coastguard Worker[[/* Symbol kind. */ 621*cda5da8dSAndroid Build Coastguard Workerenum yysymbol_kind_t 622*cda5da8dSAndroid Build Coastguard Worker{ 623*cda5da8dSAndroid Build Coastguard Worker ]b4_symbol(empty, [kind_base])[ = -2, 624*cda5da8dSAndroid Build Coastguard Worker]b4_symbol_foreach([b4_symbol_enum])dnl 625*cda5da8dSAndroid Build Coastguard Worker[}; 626*cda5da8dSAndroid Build Coastguard Workertypedef enum yysymbol_kind_t yysymbol_kind_t; 627*cda5da8dSAndroid Build Coastguard Worker]])]) 628*cda5da8dSAndroid Build Coastguard Worker 629*cda5da8dSAndroid Build Coastguard Worker 630*cda5da8dSAndroid Build Coastguard Worker## ----------------- ## 631*cda5da8dSAndroid Build Coastguard Worker## Semantic Values. ## 632*cda5da8dSAndroid Build Coastguard Worker## ----------------- ## 633*cda5da8dSAndroid Build Coastguard Worker 634*cda5da8dSAndroid Build Coastguard Worker 635*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_value(VAL, [SYMBOL-NUM], [TYPE-TAG]) 636*cda5da8dSAndroid Build Coastguard Worker# ---------------------------------------------- 637*cda5da8dSAndroid Build Coastguard Worker# See README. 638*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_value], 639*cda5da8dSAndroid Build Coastguard Worker[m4_ifval([$3], 640*cda5da8dSAndroid Build Coastguard Worker [($1.$3)], 641*cda5da8dSAndroid Build Coastguard Worker [m4_ifval([$2], 642*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_if([$2], [has_type], 643*cda5da8dSAndroid Build Coastguard Worker [($1.b4_symbol([$2], [type]))], 644*cda5da8dSAndroid Build Coastguard Worker [$1])], 645*cda5da8dSAndroid Build Coastguard Worker [$1])])]) 646*cda5da8dSAndroid Build Coastguard Worker 647*cda5da8dSAndroid Build Coastguard Worker 648*cda5da8dSAndroid Build Coastguard Worker## ---------------------- ## 649*cda5da8dSAndroid Build Coastguard Worker## Defining C functions. ## 650*cda5da8dSAndroid Build Coastguard Worker## ---------------------- ## 651*cda5da8dSAndroid Build Coastguard Worker 652*cda5da8dSAndroid Build Coastguard Worker 653*cda5da8dSAndroid Build Coastguard Worker# b4_formals([DECL1, NAME1], ...) 654*cda5da8dSAndroid Build Coastguard Worker# ------------------------------- 655*cda5da8dSAndroid Build Coastguard Worker# The formal arguments of a C function definition. 656*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_formals], 657*cda5da8dSAndroid Build Coastguard Worker[m4_if([$#], [0], [void], 658*cda5da8dSAndroid Build Coastguard Worker [$#$1], [1], [void], 659*cda5da8dSAndroid Build Coastguard Worker [m4_map_sep([b4_formal], [, ], [$@])])]) 660*cda5da8dSAndroid Build Coastguard Worker 661*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_formal], 662*cda5da8dSAndroid Build Coastguard Worker[$1]) 663*cda5da8dSAndroid Build Coastguard Worker 664*cda5da8dSAndroid Build Coastguard Worker 665*cda5da8dSAndroid Build Coastguard Worker# b4_function_declare(NAME, RETURN-VALUE, [DECL1, NAME1], ...) 666*cda5da8dSAndroid Build Coastguard Worker# ------------------------------------------------------------ 667*cda5da8dSAndroid Build Coastguard Worker# Declare the function NAME. 668*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_function_declare], 669*cda5da8dSAndroid Build Coastguard Worker[$2 $1 (b4_formals(m4_shift2($@)));[]dnl 670*cda5da8dSAndroid Build Coastguard Worker]) 671*cda5da8dSAndroid Build Coastguard Worker 672*cda5da8dSAndroid Build Coastguard Worker 673*cda5da8dSAndroid Build Coastguard Worker 674*cda5da8dSAndroid Build Coastguard Worker## --------------------- ## 675*cda5da8dSAndroid Build Coastguard Worker## Calling C functions. ## 676*cda5da8dSAndroid Build Coastguard Worker## --------------------- ## 677*cda5da8dSAndroid Build Coastguard Worker 678*cda5da8dSAndroid Build Coastguard Worker 679*cda5da8dSAndroid Build Coastguard Worker# b4_function_call(NAME, RETURN-VALUE, [DECL1, NAME1], ...) 680*cda5da8dSAndroid Build Coastguard Worker# ----------------------------------------------------------- 681*cda5da8dSAndroid Build Coastguard Worker# Call the function NAME with arguments NAME1, NAME2 etc. 682*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_function_call], 683*cda5da8dSAndroid Build Coastguard Worker[$1 (b4_args(m4_shift2($@)))[]dnl 684*cda5da8dSAndroid Build Coastguard Worker]) 685*cda5da8dSAndroid Build Coastguard Worker 686*cda5da8dSAndroid Build Coastguard Worker 687*cda5da8dSAndroid Build Coastguard Worker# b4_args([DECL1, NAME1], ...) 688*cda5da8dSAndroid Build Coastguard Worker# ---------------------------- 689*cda5da8dSAndroid Build Coastguard Worker# Output the arguments NAME1, NAME2... 690*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_args], 691*cda5da8dSAndroid Build Coastguard Worker[m4_map_sep([b4_arg], [, ], [$@])]) 692*cda5da8dSAndroid Build Coastguard Worker 693*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_arg], 694*cda5da8dSAndroid Build Coastguard Worker[$2]) 695*cda5da8dSAndroid Build Coastguard Worker 696*cda5da8dSAndroid Build Coastguard Worker 697*cda5da8dSAndroid Build Coastguard Worker## ----------- ## 698*cda5da8dSAndroid Build Coastguard Worker## Synclines. ## 699*cda5da8dSAndroid Build Coastguard Worker## ----------- ## 700*cda5da8dSAndroid Build Coastguard Worker 701*cda5da8dSAndroid Build Coastguard Worker# b4_sync_start(LINE, FILE) 702*cda5da8dSAndroid Build Coastguard Worker# ------------------------- 703*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_sync_start], [[#]line $1 $2]) 704*cda5da8dSAndroid Build Coastguard Worker 705*cda5da8dSAndroid Build Coastguard Worker 706*cda5da8dSAndroid Build Coastguard Worker## -------------- ## 707*cda5da8dSAndroid Build Coastguard Worker## User actions. ## 708*cda5da8dSAndroid Build Coastguard Worker## -------------- ## 709*cda5da8dSAndroid Build Coastguard Worker 710*cda5da8dSAndroid Build Coastguard Worker# b4_case(LABEL, STATEMENTS, [COMMENTS]) 711*cda5da8dSAndroid Build Coastguard Worker# -------------------------------------- 712*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_case], 713*cda5da8dSAndroid Build Coastguard Worker[ case $1:m4_ifval([$3], [ b4_comment([$3])]) 714*cda5da8dSAndroid Build Coastguard Worker$2 715*cda5da8dSAndroid Build Coastguard Workerb4_syncline([@oline@], [@ofile@])dnl 716*cda5da8dSAndroid Build Coastguard Worker break;]) 717*cda5da8dSAndroid Build Coastguard Worker 718*cda5da8dSAndroid Build Coastguard Worker 719*cda5da8dSAndroid Build Coastguard Worker# b4_predicate_case(LABEL, CONDITIONS) 720*cda5da8dSAndroid Build Coastguard Worker# ------------------------------------ 721*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_predicate_case], 722*cda5da8dSAndroid Build Coastguard Worker[ case $1: 723*cda5da8dSAndroid Build Coastguard Worker if (! ( 724*cda5da8dSAndroid Build Coastguard Worker$2)) YYERROR; 725*cda5da8dSAndroid Build Coastguard Workerb4_syncline([@oline@], [@ofile@])dnl 726*cda5da8dSAndroid Build Coastguard Worker break;]) 727*cda5da8dSAndroid Build Coastguard Worker 728*cda5da8dSAndroid Build Coastguard Worker 729*cda5da8dSAndroid Build Coastguard Worker# b4_yydestruct_define 730*cda5da8dSAndroid Build Coastguard Worker# -------------------- 731*cda5da8dSAndroid Build Coastguard Worker# Define the "yydestruct" function. 732*cda5da8dSAndroid Build Coastguard Workerm4_define_default([b4_yydestruct_define], 733*cda5da8dSAndroid Build Coastguard Worker[[/*-----------------------------------------------. 734*cda5da8dSAndroid Build Coastguard Worker| Release the memory associated to this symbol. | 735*cda5da8dSAndroid Build Coastguard Worker`-----------------------------------------------*/ 736*cda5da8dSAndroid Build Coastguard Worker 737*cda5da8dSAndroid Build Coastguard Workerstatic void 738*cda5da8dSAndroid Build Coastguard Workeryydestruct (const char *yymsg, 739*cda5da8dSAndroid Build Coastguard Worker yysymbol_kind_t yykind, YYSTYPE *yyvaluep]b4_locations_if(dnl 740*cda5da8dSAndroid Build Coastguard Worker[[, YYLTYPE *yylocationp]])[]b4_user_formals[) 741*cda5da8dSAndroid Build Coastguard Worker{ 742*cda5da8dSAndroid Build Coastguard Worker]b4_parse_param_use([yyvaluep], [yylocationp])dnl 743*cda5da8dSAndroid Build Coastguard Worker[ if (!yymsg) 744*cda5da8dSAndroid Build Coastguard Worker yymsg = "Deleting"; 745*cda5da8dSAndroid Build Coastguard Worker YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); 746*cda5da8dSAndroid Build Coastguard Worker 747*cda5da8dSAndroid Build Coastguard Worker YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 748*cda5da8dSAndroid Build Coastguard Worker ]b4_symbol_actions([destructor])[ 749*cda5da8dSAndroid Build Coastguard Worker YY_IGNORE_MAYBE_UNINITIALIZED_END 750*cda5da8dSAndroid Build Coastguard Worker}]dnl 751*cda5da8dSAndroid Build Coastguard Worker]) 752*cda5da8dSAndroid Build Coastguard Worker 753*cda5da8dSAndroid Build Coastguard Worker 754*cda5da8dSAndroid Build Coastguard Worker# b4_yy_symbol_print_define 755*cda5da8dSAndroid Build Coastguard Worker# ------------------------- 756*cda5da8dSAndroid Build Coastguard Worker# Define the "yy_symbol_print" function. 757*cda5da8dSAndroid Build Coastguard Workerm4_define_default([b4_yy_symbol_print_define], 758*cda5da8dSAndroid Build Coastguard Worker[[ 759*cda5da8dSAndroid Build Coastguard Worker/*-----------------------------------. 760*cda5da8dSAndroid Build Coastguard Worker| Print this symbol's value on YYO. | 761*cda5da8dSAndroid Build Coastguard Worker`-----------------------------------*/ 762*cda5da8dSAndroid Build Coastguard Worker 763*cda5da8dSAndroid Build Coastguard Workerstatic void 764*cda5da8dSAndroid Build Coastguard Workeryy_symbol_value_print (FILE *yyo, 765*cda5da8dSAndroid Build Coastguard Worker yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep]b4_locations_if(dnl 766*cda5da8dSAndroid Build Coastguard Worker[[, YYLTYPE const * const yylocationp]])[]b4_user_formals[) 767*cda5da8dSAndroid Build Coastguard Worker{ 768*cda5da8dSAndroid Build Coastguard Worker FILE *yyoutput = yyo; 769*cda5da8dSAndroid Build Coastguard Worker]b4_parse_param_use([yyoutput], [yylocationp])dnl 770*cda5da8dSAndroid Build Coastguard Worker[ if (!yyvaluep) 771*cda5da8dSAndroid Build Coastguard Worker return;] 772*cda5da8dSAndroid Build Coastguard Workerb4_percent_code_get([[pre-printer]])dnl 773*cda5da8dSAndroid Build Coastguard Worker YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 774*cda5da8dSAndroid Build Coastguard Worker b4_symbol_actions([printer]) 775*cda5da8dSAndroid Build Coastguard Worker YY_IGNORE_MAYBE_UNINITIALIZED_END 776*cda5da8dSAndroid Build Coastguard Workerb4_percent_code_get([[post-printer]])dnl 777*cda5da8dSAndroid Build Coastguard Worker[} 778*cda5da8dSAndroid Build Coastguard Worker 779*cda5da8dSAndroid Build Coastguard Worker 780*cda5da8dSAndroid Build Coastguard Worker/*---------------------------. 781*cda5da8dSAndroid Build Coastguard Worker| Print this symbol on YYO. | 782*cda5da8dSAndroid Build Coastguard Worker`---------------------------*/ 783*cda5da8dSAndroid Build Coastguard Worker 784*cda5da8dSAndroid Build Coastguard Workerstatic void 785*cda5da8dSAndroid Build Coastguard Workeryy_symbol_print (FILE *yyo, 786*cda5da8dSAndroid Build Coastguard Worker yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep]b4_locations_if(dnl 787*cda5da8dSAndroid Build Coastguard Worker[[, YYLTYPE const * const yylocationp]])[]b4_user_formals[) 788*cda5da8dSAndroid Build Coastguard Worker{ 789*cda5da8dSAndroid Build Coastguard Worker YYFPRINTF (yyo, "%s %s (", 790*cda5da8dSAndroid Build Coastguard Worker yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); 791*cda5da8dSAndroid Build Coastguard Worker 792*cda5da8dSAndroid Build Coastguard Worker]b4_locations_if([ YYLOCATION_PRINT (yyo, yylocationp); 793*cda5da8dSAndroid Build Coastguard Worker YYFPRINTF (yyo, ": "); 794*cda5da8dSAndroid Build Coastguard Worker])dnl 795*cda5da8dSAndroid Build Coastguard Worker[ yy_symbol_value_print (yyo, yykind, yyvaluep]dnl 796*cda5da8dSAndroid Build Coastguard Workerb4_locations_if([, yylocationp])[]b4_user_args[); 797*cda5da8dSAndroid Build Coastguard Worker YYFPRINTF (yyo, ")"); 798*cda5da8dSAndroid Build Coastguard Worker}]dnl 799*cda5da8dSAndroid Build Coastguard Worker]) 800*cda5da8dSAndroid Build Coastguard Worker 801*cda5da8dSAndroid Build Coastguard Worker 802*cda5da8dSAndroid Build Coastguard Worker## ---------------- ## 803*cda5da8dSAndroid Build Coastguard Worker## api.value.type. ## 804*cda5da8dSAndroid Build Coastguard Worker## ---------------- ## 805*cda5da8dSAndroid Build Coastguard Worker 806*cda5da8dSAndroid Build Coastguard Worker 807*cda5da8dSAndroid Build Coastguard Worker# ---------------------- # 808*cda5da8dSAndroid Build Coastguard Worker# api.value.type=union. # 809*cda5da8dSAndroid Build Coastguard Worker# ---------------------- # 810*cda5da8dSAndroid Build Coastguard Worker 811*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_type_register(SYMBOL-NUM) 812*cda5da8dSAndroid Build Coastguard Worker# ----------------------------------- 813*cda5da8dSAndroid Build Coastguard Worker# Symbol SYMBOL-NUM has a type (for variant) instead of a type-tag. 814*cda5da8dSAndroid Build Coastguard Worker# Extend the definition of %union's body (b4_union_members) with a 815*cda5da8dSAndroid Build Coastguard Worker# field of that type, and extend the symbol's "type" field to point to 816*cda5da8dSAndroid Build Coastguard Worker# the field name, instead of the type name. 817*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_type_register], 818*cda5da8dSAndroid Build Coastguard Worker[m4_define([b4_symbol($1, type_tag)], 819*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_if([$1], [has_id], 820*cda5da8dSAndroid Build Coastguard Worker [b4_symbol([$1], [id])], 821*cda5da8dSAndroid Build Coastguard Worker [yykind_[]b4_symbol([$1], [number])])])dnl 822*cda5da8dSAndroid Build Coastguard Workerm4_append([b4_union_members], 823*cda5da8dSAndroid Build Coastguard Workerm4_expand([m4_format([ %-40s %s], 824*cda5da8dSAndroid Build Coastguard Worker m4_expand([b4_symbol([$1], [type]) b4_symbol([$1], [type_tag]);]), 825*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_tag_comment([$1])])])) 826*cda5da8dSAndroid Build Coastguard Worker]) 827*cda5da8dSAndroid Build Coastguard Worker 828*cda5da8dSAndroid Build Coastguard Worker 829*cda5da8dSAndroid Build Coastguard Worker# b4_type_define_tag(SYMBOL1-NUM, ...) 830*cda5da8dSAndroid Build Coastguard Worker# ------------------------------------ 831*cda5da8dSAndroid Build Coastguard Worker# For the batch of symbols SYMBOL1-NUM... (which all have the same 832*cda5da8dSAndroid Build Coastguard Worker# type), enhance the %union definition for each of them, and set 833*cda5da8dSAndroid Build Coastguard Worker# there "type" field to the field tag name, instead of the type name. 834*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_type_define_tag], 835*cda5da8dSAndroid Build Coastguard Worker[b4_symbol_if([$1], [has_type], 836*cda5da8dSAndroid Build Coastguard Worker [m4_map([b4_symbol_type_register], [$@])]) 837*cda5da8dSAndroid Build Coastguard Worker]) 838*cda5da8dSAndroid Build Coastguard Worker 839*cda5da8dSAndroid Build Coastguard Worker 840*cda5da8dSAndroid Build Coastguard Worker# b4_symbol_value_union(VAL, SYMBOL-NUM, [TYPE]) 841*cda5da8dSAndroid Build Coastguard Worker# ---------------------------------------------- 842*cda5da8dSAndroid Build Coastguard Worker# Same of b4_symbol_value, but when api.value.type=union. 843*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_symbol_value_union], 844*cda5da8dSAndroid Build Coastguard Worker[m4_ifval([$3], 845*cda5da8dSAndroid Build Coastguard Worker [(*($3*)(&$1))], 846*cda5da8dSAndroid Build Coastguard Worker [m4_ifval([$2], 847*cda5da8dSAndroid Build Coastguard Worker [b4_symbol_if([$2], [has_type], 848*cda5da8dSAndroid Build Coastguard Worker [($1.b4_symbol([$2], [type_tag]))], 849*cda5da8dSAndroid Build Coastguard Worker [$1])], 850*cda5da8dSAndroid Build Coastguard Worker [$1])])]) 851*cda5da8dSAndroid Build Coastguard Worker 852*cda5da8dSAndroid Build Coastguard Worker 853*cda5da8dSAndroid Build Coastguard Worker# b4_value_type_setup_union 854*cda5da8dSAndroid Build Coastguard Worker# ------------------------- 855*cda5da8dSAndroid Build Coastguard Worker# Setup support for api.value.type=union. Symbols are defined with a 856*cda5da8dSAndroid Build Coastguard Worker# type instead of a union member name: build the corresponding union, 857*cda5da8dSAndroid Build Coastguard Worker# and give the symbols their tag. 858*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_value_type_setup_union], 859*cda5da8dSAndroid Build Coastguard Worker[m4_define([b4_union_members]) 860*cda5da8dSAndroid Build Coastguard Workerb4_type_foreach([b4_type_define_tag]) 861*cda5da8dSAndroid Build Coastguard Workerm4_copy_force([b4_symbol_value_union], [b4_symbol_value]) 862*cda5da8dSAndroid Build Coastguard Worker]) 863*cda5da8dSAndroid Build Coastguard Worker 864*cda5da8dSAndroid Build Coastguard Worker 865*cda5da8dSAndroid Build Coastguard Worker# -------------------------- # 866*cda5da8dSAndroid Build Coastguard Worker# api.value.type = variant. # 867*cda5da8dSAndroid Build Coastguard Worker# -------------------------- # 868*cda5da8dSAndroid Build Coastguard Worker 869*cda5da8dSAndroid Build Coastguard Worker# b4_value_type_setup_variant 870*cda5da8dSAndroid Build Coastguard Worker# --------------------------- 871*cda5da8dSAndroid Build Coastguard Worker# Setup support for api.value.type=variant. By default, fail, specialized 872*cda5da8dSAndroid Build Coastguard Worker# by other skeletons. 873*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_value_type_setup_variant], 874*cda5da8dSAndroid Build Coastguard Worker[b4_complain_at(b4_percent_define_get_loc([[api.value.type]]), 875*cda5da8dSAndroid Build Coastguard Worker [['%s' does not support '%s']], 876*cda5da8dSAndroid Build Coastguard Worker [b4_skeleton], 877*cda5da8dSAndroid Build Coastguard Worker [%define api.value.type variant])]) 878*cda5da8dSAndroid Build Coastguard Worker 879*cda5da8dSAndroid Build Coastguard Worker 880*cda5da8dSAndroid Build Coastguard Worker# _b4_value_type_setup_keyword 881*cda5da8dSAndroid Build Coastguard Worker# ---------------------------- 882*cda5da8dSAndroid Build Coastguard Worker# api.value.type is defined with a keyword/string syntax. Check if 883*cda5da8dSAndroid Build Coastguard Worker# that is properly defined, and prepare its use. 884*cda5da8dSAndroid Build Coastguard Workerm4_define([_b4_value_type_setup_keyword], 885*cda5da8dSAndroid Build Coastguard Worker[b4_percent_define_check_values([[[[api.value.type]], 886*cda5da8dSAndroid Build Coastguard Worker [[none]], 887*cda5da8dSAndroid Build Coastguard Worker [[union]], 888*cda5da8dSAndroid Build Coastguard Worker [[union-directive]], 889*cda5da8dSAndroid Build Coastguard Worker [[variant]], 890*cda5da8dSAndroid Build Coastguard Worker [[yystype]]]])dnl 891*cda5da8dSAndroid Build Coastguard Workerm4_case(b4_percent_define_get([[api.value.type]]), 892*cda5da8dSAndroid Build Coastguard Worker [union], [b4_value_type_setup_union], 893*cda5da8dSAndroid Build Coastguard Worker [variant], [b4_value_type_setup_variant])]) 894*cda5da8dSAndroid Build Coastguard Worker 895*cda5da8dSAndroid Build Coastguard Worker 896*cda5da8dSAndroid Build Coastguard Worker# b4_value_type_setup 897*cda5da8dSAndroid Build Coastguard Worker# ------------------- 898*cda5da8dSAndroid Build Coastguard Worker# Check if api.value.type is properly defined, and possibly prepare 899*cda5da8dSAndroid Build Coastguard Worker# its use. 900*cda5da8dSAndroid Build Coastguard Workerb4_define_silent([b4_value_type_setup], 901*cda5da8dSAndroid Build Coastguard Worker[# Define default value. 902*cda5da8dSAndroid Build Coastguard Workerb4_percent_define_ifdef([[api.value.type]], [], 903*cda5da8dSAndroid Build Coastguard Worker[# %union => api.value.type=union-directive 904*cda5da8dSAndroid Build Coastguard Workerm4_ifdef([b4_union_members], 905*cda5da8dSAndroid Build Coastguard Worker[m4_define([b4_percent_define_kind(api.value.type)], [keyword]) 906*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_percent_define(api.value.type)], [union-directive])], 907*cda5da8dSAndroid Build Coastguard Worker[# no tag seen => api.value.type={int} 908*cda5da8dSAndroid Build Coastguard Workerm4_if(b4_tag_seen_flag, 0, 909*cda5da8dSAndroid Build Coastguard Worker[m4_define([b4_percent_define_kind(api.value.type)], [code]) 910*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_percent_define(api.value.type)], [int])], 911*cda5da8dSAndroid Build Coastguard Worker[# otherwise api.value.type=yystype 912*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_percent_define_kind(api.value.type)], [keyword]) 913*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_percent_define(api.value.type)], [yystype])])])]) 914*cda5da8dSAndroid Build Coastguard Worker 915*cda5da8dSAndroid Build Coastguard Worker# Set up. 916*cda5da8dSAndroid Build Coastguard Workerm4_bmatch(b4_percent_define_get_kind([[api.value.type]]), 917*cda5da8dSAndroid Build Coastguard Worker [keyword\|string], [_b4_value_type_setup_keyword]) 918*cda5da8dSAndroid Build Coastguard Worker]) 919*cda5da8dSAndroid Build Coastguard Worker 920*cda5da8dSAndroid Build Coastguard Worker 921*cda5da8dSAndroid Build Coastguard Worker## -------------- ## 922*cda5da8dSAndroid Build Coastguard Worker## Declarations. ## 923*cda5da8dSAndroid Build Coastguard Worker## -------------- ## 924*cda5da8dSAndroid Build Coastguard Worker 925*cda5da8dSAndroid Build Coastguard Worker 926*cda5da8dSAndroid Build Coastguard Worker# b4_value_type_define 927*cda5da8dSAndroid Build Coastguard Worker# -------------------- 928*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_value_type_define], 929*cda5da8dSAndroid Build Coastguard Worker[b4_value_type_setup[]dnl 930*cda5da8dSAndroid Build Coastguard Worker/* Value type. */ 931*cda5da8dSAndroid Build Coastguard Workerm4_bmatch(b4_percent_define_get_kind([[api.value.type]]), 932*cda5da8dSAndroid Build Coastguard Worker[code], 933*cda5da8dSAndroid Build Coastguard Worker[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED 934*cda5da8dSAndroid Build Coastguard Workertypedef ]b4_percent_define_get([[api.value.type]])[ ]b4_api_PREFIX[STYPE; 935*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1 936*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1 937*cda5da8dSAndroid Build Coastguard Worker#endif 938*cda5da8dSAndroid Build Coastguard Worker]], 939*cda5da8dSAndroid Build Coastguard Worker[m4_bmatch(b4_percent_define_get([[api.value.type]]), 940*cda5da8dSAndroid Build Coastguard Worker[union\|union-directive], 941*cda5da8dSAndroid Build Coastguard Worker[[#if ! defined ]b4_api_PREFIX[STYPE && ! defined ]b4_api_PREFIX[STYPE_IS_DECLARED 942*cda5da8dSAndroid Build Coastguard Worker]b4_percent_define_get_syncline([[api.value.union.name]])dnl 943*cda5da8dSAndroid Build Coastguard Worker[union ]b4_percent_define_get([[api.value.union.name]])[ 944*cda5da8dSAndroid Build Coastguard Worker{ 945*cda5da8dSAndroid Build Coastguard Worker]b4_user_union_members[ 946*cda5da8dSAndroid Build Coastguard Worker}; 947*cda5da8dSAndroid Build Coastguard Worker]b4_percent_define_get_syncline([[api.value.union.name]])dnl 948*cda5da8dSAndroid Build Coastguard Worker[typedef union ]b4_percent_define_get([[api.value.union.name]])[ ]b4_api_PREFIX[STYPE; 949*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[STYPE_IS_TRIVIAL 1 950*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[STYPE_IS_DECLARED 1 951*cda5da8dSAndroid Build Coastguard Worker#endif 952*cda5da8dSAndroid Build Coastguard Worker]])])]) 953*cda5da8dSAndroid Build Coastguard Worker 954*cda5da8dSAndroid Build Coastguard Worker 955*cda5da8dSAndroid Build Coastguard Worker# b4_location_type_define 956*cda5da8dSAndroid Build Coastguard Worker# ----------------------- 957*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_location_type_define], 958*cda5da8dSAndroid Build Coastguard Worker[[/* Location type. */ 959*cda5da8dSAndroid Build Coastguard Worker]b4_percent_define_ifdef([[api.location.type]], 960*cda5da8dSAndroid Build Coastguard Worker[[typedef ]b4_percent_define_get([[api.location.type]])[ ]b4_api_PREFIX[LTYPE; 961*cda5da8dSAndroid Build Coastguard Worker]], 962*cda5da8dSAndroid Build Coastguard Worker[[#if ! defined ]b4_api_PREFIX[LTYPE && ! defined ]b4_api_PREFIX[LTYPE_IS_DECLARED 963*cda5da8dSAndroid Build Coastguard Workertypedef struct ]b4_api_PREFIX[LTYPE ]b4_api_PREFIX[LTYPE; 964*cda5da8dSAndroid Build Coastguard Workerstruct ]b4_api_PREFIX[LTYPE 965*cda5da8dSAndroid Build Coastguard Worker{ 966*cda5da8dSAndroid Build Coastguard Worker int first_line; 967*cda5da8dSAndroid Build Coastguard Worker int first_column; 968*cda5da8dSAndroid Build Coastguard Worker int last_line; 969*cda5da8dSAndroid Build Coastguard Worker int last_column; 970*cda5da8dSAndroid Build Coastguard Worker}; 971*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[LTYPE_IS_DECLARED 1 972*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1 973*cda5da8dSAndroid Build Coastguard Worker#endif 974*cda5da8dSAndroid Build Coastguard Worker]])]) 975*cda5da8dSAndroid Build Coastguard Worker 976*cda5da8dSAndroid Build Coastguard Worker 977*cda5da8dSAndroid Build Coastguard Worker# b4_declare_yylstype 978*cda5da8dSAndroid Build Coastguard Worker# ------------------- 979*cda5da8dSAndroid Build Coastguard Worker# Declarations that might either go into the header (if --header) or 980*cda5da8dSAndroid Build Coastguard Worker# in the parser body. Declare YYSTYPE/YYLTYPE, and yylval/yylloc. 981*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_declare_yylstype], 982*cda5da8dSAndroid Build Coastguard Worker[b4_value_type_define[]b4_locations_if([ 983*cda5da8dSAndroid Build Coastguard Workerb4_location_type_define]) 984*cda5da8dSAndroid Build Coastguard Worker 985*cda5da8dSAndroid Build Coastguard Workerb4_pure_if([], [[extern ]b4_api_PREFIX[STYPE ]b4_prefix[lval; 986*cda5da8dSAndroid Build Coastguard Worker]b4_locations_if([[extern ]b4_api_PREFIX[LTYPE ]b4_prefix[lloc;]])])[]dnl 987*cda5da8dSAndroid Build Coastguard Worker]) 988*cda5da8dSAndroid Build Coastguard Worker 989*cda5da8dSAndroid Build Coastguard Worker 990*cda5da8dSAndroid Build Coastguard Worker# b4_YYDEBUG_define 991*cda5da8dSAndroid Build Coastguard Worker# ----------------- 992*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_YYDEBUG_define], 993*cda5da8dSAndroid Build Coastguard Worker[[/* Debug traces. */ 994*cda5da8dSAndroid Build Coastguard Worker]m4_if(b4_api_prefix, [yy], 995*cda5da8dSAndroid Build Coastguard Worker[[#ifndef YYDEBUG 996*cda5da8dSAndroid Build Coastguard Worker# define YYDEBUG ]b4_parse_trace_if([1], [0])[ 997*cda5da8dSAndroid Build Coastguard Worker#endif]], 998*cda5da8dSAndroid Build Coastguard Worker[[#ifndef ]b4_api_PREFIX[DEBUG 999*cda5da8dSAndroid Build Coastguard Worker# if defined YYDEBUG 1000*cda5da8dSAndroid Build Coastguard Worker#if YYDEBUG 1001*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[DEBUG 1 1002*cda5da8dSAndroid Build Coastguard Worker# else 1003*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[DEBUG 0 1004*cda5da8dSAndroid Build Coastguard Worker# endif 1005*cda5da8dSAndroid Build Coastguard Worker# else /* ! defined YYDEBUG */ 1006*cda5da8dSAndroid Build Coastguard Worker# define ]b4_api_PREFIX[DEBUG ]b4_parse_trace_if([1], [0])[ 1007*cda5da8dSAndroid Build Coastguard Worker# endif /* ! defined YYDEBUG */ 1008*cda5da8dSAndroid Build Coastguard Worker#endif /* ! defined ]b4_api_PREFIX[DEBUG */]])[]dnl 1009*cda5da8dSAndroid Build Coastguard Worker]) 1010*cda5da8dSAndroid Build Coastguard Worker 1011*cda5da8dSAndroid Build Coastguard Worker# b4_declare_yydebug 1012*cda5da8dSAndroid Build Coastguard Worker# ------------------ 1013*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_declare_yydebug], 1014*cda5da8dSAndroid Build Coastguard Worker[b4_YYDEBUG_define[ 1015*cda5da8dSAndroid Build Coastguard Worker#if ]b4_api_PREFIX[DEBUG 1016*cda5da8dSAndroid Build Coastguard Workerextern int ]b4_prefix[debug; 1017*cda5da8dSAndroid Build Coastguard Worker#endif][]dnl 1018*cda5da8dSAndroid Build Coastguard Worker]) 1019*cda5da8dSAndroid Build Coastguard Worker 1020*cda5da8dSAndroid Build Coastguard Worker# b4_yylloc_default_define 1021*cda5da8dSAndroid Build Coastguard Worker# ------------------------ 1022*cda5da8dSAndroid Build Coastguard Worker# Define YYLLOC_DEFAULT. 1023*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_yylloc_default_define], 1024*cda5da8dSAndroid Build Coastguard Worker[[/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 1025*cda5da8dSAndroid Build Coastguard Worker If N is 0, then set CURRENT to the empty location which ends 1026*cda5da8dSAndroid Build Coastguard Worker the previous symbol: RHS[0] (always defined). */ 1027*cda5da8dSAndroid Build Coastguard Worker 1028*cda5da8dSAndroid Build Coastguard Worker#ifndef YYLLOC_DEFAULT 1029*cda5da8dSAndroid Build Coastguard Worker# define YYLLOC_DEFAULT(Current, Rhs, N) \ 1030*cda5da8dSAndroid Build Coastguard Worker do \ 1031*cda5da8dSAndroid Build Coastguard Worker if (N) \ 1032*cda5da8dSAndroid Build Coastguard Worker { \ 1033*cda5da8dSAndroid Build Coastguard Worker (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 1034*cda5da8dSAndroid Build Coastguard Worker (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 1035*cda5da8dSAndroid Build Coastguard Worker (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 1036*cda5da8dSAndroid Build Coastguard Worker (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 1037*cda5da8dSAndroid Build Coastguard Worker } \ 1038*cda5da8dSAndroid Build Coastguard Worker else \ 1039*cda5da8dSAndroid Build Coastguard Worker { \ 1040*cda5da8dSAndroid Build Coastguard Worker (Current).first_line = (Current).last_line = \ 1041*cda5da8dSAndroid Build Coastguard Worker YYRHSLOC (Rhs, 0).last_line; \ 1042*cda5da8dSAndroid Build Coastguard Worker (Current).first_column = (Current).last_column = \ 1043*cda5da8dSAndroid Build Coastguard Worker YYRHSLOC (Rhs, 0).last_column; \ 1044*cda5da8dSAndroid Build Coastguard Worker } \ 1045*cda5da8dSAndroid Build Coastguard Worker while (0) 1046*cda5da8dSAndroid Build Coastguard Worker#endif 1047*cda5da8dSAndroid Build Coastguard Worker]]) 1048*cda5da8dSAndroid Build Coastguard Worker 1049*cda5da8dSAndroid Build Coastguard Worker# b4_yylocation_print_define 1050*cda5da8dSAndroid Build Coastguard Worker# -------------------------- 1051*cda5da8dSAndroid Build Coastguard Worker# Define YYLOCATION_PRINT. 1052*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_yylocation_print_define], 1053*cda5da8dSAndroid Build Coastguard Worker[b4_locations_if([[ 1054*cda5da8dSAndroid Build Coastguard Worker/* YYLOCATION_PRINT -- Print the location on the stream. 1055*cda5da8dSAndroid Build Coastguard Worker This macro was not mandated originally: define only if we know 1056*cda5da8dSAndroid Build Coastguard Worker we won't break user code: when these are the locations we know. */ 1057*cda5da8dSAndroid Build Coastguard Worker 1058*cda5da8dSAndroid Build Coastguard Worker# ifndef YYLOCATION_PRINT 1059*cda5da8dSAndroid Build Coastguard Worker 1060*cda5da8dSAndroid Build Coastguard Worker# if defined YY_LOCATION_PRINT 1061*cda5da8dSAndroid Build Coastguard Worker 1062*cda5da8dSAndroid Build Coastguard Worker /* Temporary convenience wrapper in case some people defined the 1063*cda5da8dSAndroid Build Coastguard Worker undocumented and private YY_LOCATION_PRINT macros. */ 1064*cda5da8dSAndroid Build Coastguard Worker# define YYLOCATION_PRINT(File, Loc) YY_LOCATION_PRINT(File, *(Loc)) 1065*cda5da8dSAndroid Build Coastguard Worker 1066*cda5da8dSAndroid Build Coastguard Worker# elif defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1067*cda5da8dSAndroid Build Coastguard Worker 1068*cda5da8dSAndroid Build Coastguard Worker/* Print *YYLOCP on YYO. Private, do not rely on its existence. */ 1069*cda5da8dSAndroid Build Coastguard Worker 1070*cda5da8dSAndroid Build Coastguard WorkerYY_ATTRIBUTE_UNUSED 1071*cda5da8dSAndroid Build Coastguard Workerstatic int 1072*cda5da8dSAndroid Build Coastguard Workeryy_location_print_ (FILE *yyo, YYLTYPE const * const yylocp) 1073*cda5da8dSAndroid Build Coastguard Worker{ 1074*cda5da8dSAndroid Build Coastguard Worker int res = 0; 1075*cda5da8dSAndroid Build Coastguard Worker int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; 1076*cda5da8dSAndroid Build Coastguard Worker if (0 <= yylocp->first_line) 1077*cda5da8dSAndroid Build Coastguard Worker { 1078*cda5da8dSAndroid Build Coastguard Worker res += YYFPRINTF (yyo, "%d", yylocp->first_line); 1079*cda5da8dSAndroid Build Coastguard Worker if (0 <= yylocp->first_column) 1080*cda5da8dSAndroid Build Coastguard Worker res += YYFPRINTF (yyo, ".%d", yylocp->first_column); 1081*cda5da8dSAndroid Build Coastguard Worker } 1082*cda5da8dSAndroid Build Coastguard Worker if (0 <= yylocp->last_line) 1083*cda5da8dSAndroid Build Coastguard Worker { 1084*cda5da8dSAndroid Build Coastguard Worker if (yylocp->first_line < yylocp->last_line) 1085*cda5da8dSAndroid Build Coastguard Worker { 1086*cda5da8dSAndroid Build Coastguard Worker res += YYFPRINTF (yyo, "-%d", yylocp->last_line); 1087*cda5da8dSAndroid Build Coastguard Worker if (0 <= end_col) 1088*cda5da8dSAndroid Build Coastguard Worker res += YYFPRINTF (yyo, ".%d", end_col); 1089*cda5da8dSAndroid Build Coastguard Worker } 1090*cda5da8dSAndroid Build Coastguard Worker else if (0 <= end_col && yylocp->first_column < end_col) 1091*cda5da8dSAndroid Build Coastguard Worker res += YYFPRINTF (yyo, "-%d", end_col); 1092*cda5da8dSAndroid Build Coastguard Worker } 1093*cda5da8dSAndroid Build Coastguard Worker return res; 1094*cda5da8dSAndroid Build Coastguard Worker} 1095*cda5da8dSAndroid Build Coastguard Worker 1096*cda5da8dSAndroid Build Coastguard Worker# define YYLOCATION_PRINT yy_location_print_ 1097*cda5da8dSAndroid Build Coastguard Worker 1098*cda5da8dSAndroid Build Coastguard Worker /* Temporary convenience wrapper in case some people defined the 1099*cda5da8dSAndroid Build Coastguard Worker undocumented and private YY_LOCATION_PRINT macros. */ 1100*cda5da8dSAndroid Build Coastguard Worker# define YY_LOCATION_PRINT(File, Loc) YYLOCATION_PRINT(File, &(Loc)) 1101*cda5da8dSAndroid Build Coastguard Worker 1102*cda5da8dSAndroid Build Coastguard Worker# else 1103*cda5da8dSAndroid Build Coastguard Worker 1104*cda5da8dSAndroid Build Coastguard Worker# define YYLOCATION_PRINT(File, Loc) ((void) 0) 1105*cda5da8dSAndroid Build Coastguard Worker /* Temporary convenience wrapper in case some people defined the 1106*cda5da8dSAndroid Build Coastguard Worker undocumented and private YY_LOCATION_PRINT macros. */ 1107*cda5da8dSAndroid Build Coastguard Worker# define YY_LOCATION_PRINT YYLOCATION_PRINT 1108*cda5da8dSAndroid Build Coastguard Worker 1109*cda5da8dSAndroid Build Coastguard Worker# endif 1110*cda5da8dSAndroid Build Coastguard Worker# endif /* !defined YYLOCATION_PRINT */]]) 1111*cda5da8dSAndroid Build Coastguard Worker]) 1112*cda5da8dSAndroid Build Coastguard Worker 1113*cda5da8dSAndroid Build Coastguard Worker# b4_yyloc_default 1114*cda5da8dSAndroid Build Coastguard Worker# ---------------- 1115*cda5da8dSAndroid Build Coastguard Worker# Expand to a possible default value for yylloc. 1116*cda5da8dSAndroid Build Coastguard Workerm4_define([b4_yyloc_default], 1117*cda5da8dSAndroid Build Coastguard Worker[[ 1118*cda5da8dSAndroid Build Coastguard Worker# if defined ]b4_api_PREFIX[LTYPE_IS_TRIVIAL && ]b4_api_PREFIX[LTYPE_IS_TRIVIAL 1119*cda5da8dSAndroid Build Coastguard Worker = { ]m4_join([, ], 1120*cda5da8dSAndroid Build Coastguard Worker m4_defn([b4_location_initial_line]), 1121*cda5da8dSAndroid Build Coastguard Worker m4_defn([b4_location_initial_column]), 1122*cda5da8dSAndroid Build Coastguard Worker m4_defn([b4_location_initial_line]), 1123*cda5da8dSAndroid Build Coastguard Worker m4_defn([b4_location_initial_column]))[ } 1124*cda5da8dSAndroid Build Coastguard Worker# endif 1125*cda5da8dSAndroid Build Coastguard Worker]]) 1126